mirror of https://github.com/ipxe/ipxe.git
Imported latest versions from Etherboot 5.4
parent
2ff1b1245b
commit
d9bba621c8
|
@ -22,14 +22,6 @@
|
||||||
#include "cmdif_priv.h"
|
#include "cmdif_priv.h"
|
||||||
#include "mt25218.h"
|
#include "mt25218.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* cmd_sys_dis
|
|
||||||
*/
|
|
||||||
static int cmd_sys_dis(void)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cmd_write_mgm
|
* cmd_write_mgm
|
||||||
*/
|
*/
|
||||||
|
@ -325,6 +317,24 @@ static int cmd_map_icm_aux(struct map_icm_st *map_icm_aux_p)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cmd_unmap_icm_aux
|
||||||
|
*/
|
||||||
|
static int cmd_unmap_icm_aux(void)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
command_fields_t cmd_desc;
|
||||||
|
|
||||||
|
memset(&cmd_desc, 0, sizeof cmd_desc);
|
||||||
|
|
||||||
|
cmd_desc.opcode = MEMFREE_CMD_UNMAP_ICM_AUX;
|
||||||
|
|
||||||
|
rc = cmd_invoke(&cmd_desc);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cmd_map_icm
|
* cmd_map_icm
|
||||||
*/
|
*/
|
||||||
|
@ -371,6 +381,31 @@ static int cmd_map_icm(struct map_icm_st *map_icm_p)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cmd_unmap_icm
|
||||||
|
*/
|
||||||
|
static int cmd_unmap_icm(struct map_icm_st *map_icm_p)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
command_fields_t cmd_desc;
|
||||||
|
__u32 iprm[2];
|
||||||
|
|
||||||
|
memset(&cmd_desc, 0, sizeof cmd_desc);
|
||||||
|
|
||||||
|
cmd_desc.opcode = MEMFREE_CMD_UNMAP_ICM;
|
||||||
|
iprm[0] = map_icm_p->vpm_arr[0].va_h;
|
||||||
|
iprm[1] = map_icm_p->vpm_arr[0].va_l;
|
||||||
|
cmd_desc.in_param = iprm;
|
||||||
|
cmd_desc.in_trans = TRANS_IMMEDIATE;
|
||||||
|
cmd_desc.input_modifier = 1 << map_icm_p->vpm_arr[0].log2_size;
|
||||||
|
|
||||||
|
rc = cmd_invoke(&cmd_desc);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cmd_query_dev_lim
|
* cmd_query_dev_lim
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -92,13 +92,11 @@ files with .mlx extension also available from Mellanox's web site.
|
||||||
|
|
||||||
6. Preparing the DHCP Server
|
6. Preparing the DHCP Server
|
||||||
-----------------------------
|
-----------------------------
|
||||||
DHCP messages over IP Over IB are transmitted as broadcasts. In order to
|
The DHCP server may need to be modified in order to work on IPOIB. Some
|
||||||
distinguish between messages belonging to a certain DHCP session, the messages
|
distributuions alreay support this (Some SUSE distributuions) while others
|
||||||
must carry the client identifier option (see ietf documentation referred to
|
do not. If the pre-installed server does not support IPOIB, the user can download
|
||||||
above). As of November 2005, ISC DHCP servers do not support this feature.
|
the sources from ISC http://www.isc.org/ and apply the appropriate patch in
|
||||||
They are expected to support this at the end of 2005. In order to work this
|
the patches directory.
|
||||||
out, the appropriate patch must be applied (see patches directory). It has
|
|
||||||
been tested on version isc-dhcpd-V3.0.4b2.
|
|
||||||
|
|
||||||
The DHCP server must run on a machine which supports IP Over IB. The Mellanox
|
The DHCP server must run on a machine which supports IP Over IB. The Mellanox
|
||||||
IBGD package (gen1 or gen2) can be used to provide this.
|
IBGD package (gen1 or gen2) can be used to provide this.
|
||||||
|
@ -171,6 +169,14 @@ PXE_IB_PORT.
|
||||||
|
|
||||||
14. Installing a package from Mellanox
|
14. Installing a package from Mellanox
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
|
The package comes as a compressed file with extension .bz2 or .gz. Follow
|
||||||
|
these steps:
|
||||||
|
1. Create a directory
|
||||||
|
2. cd to this directory
|
||||||
|
3. tar jxf <package file name> for .bz2 files or
|
||||||
|
tar zxf <package file name> for .gz files
|
||||||
|
|
||||||
|
The binaries can be found under src/bin
|
||||||
When using a package obtained from Mellanox Technologies' web site, the
|
When using a package obtained from Mellanox Technologies' web site, the
|
||||||
directory src/bin will contain the driver binary files. The files have a .bin
|
directory src/bin will contain the driver binary files. The files have a .bin
|
||||||
extension and are equivalent to the same files with .zrom extension.
|
extension and are equivalent to the same files with .zrom extension.
|
||||||
|
|
|
@ -248,12 +248,10 @@ static int ib_driver_close(int fw_fatal)
|
||||||
ret = 1;
|
ret = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fw_fatal) {
|
rc = unset_hca();
|
||||||
rc = cmd_sys_dis();
|
if (rc) {
|
||||||
if (rc) {
|
eprintf("");
|
||||||
eprintf("");
|
ret = 1;
|
||||||
ret = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
#include "mt23108.h"
|
#include "mt23108.h"
|
||||||
#include "ib_driver.h"
|
#include "ib_driver.h"
|
||||||
#include <gpxe/pci.h>
|
#include "pci.h"
|
||||||
|
|
||||||
struct device_buffers_st {
|
struct device_buffers_st {
|
||||||
union recv_wqe_u mads_qp_rcv_queue[NUM_MADS_RCV_WQES]
|
union recv_wqe_u mads_qp_rcv_queue[NUM_MADS_RCV_WQES]
|
||||||
|
@ -799,6 +799,20 @@ static int setup_hca(__u8 port, void **eq_p)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int unset_hca(void)
|
||||||
|
{
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
if (!fw_fatal) {
|
||||||
|
rc = cmd_sys_dis();
|
||||||
|
if (rc)
|
||||||
|
eprintf("");
|
||||||
|
}
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
static void *get_inprm_buf(void)
|
static void *get_inprm_buf(void)
|
||||||
{
|
{
|
||||||
return dev_buffers_p->inprm_buf;
|
return dev_buffers_p->inprm_buf;
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
#include "mt25218.h"
|
#include "mt25218.h"
|
||||||
#include "ib_driver.h"
|
#include "ib_driver.h"
|
||||||
#include <gpxe/pci.h>
|
#include "pci.h"
|
||||||
|
|
||||||
#define MOD_INC(counter, max_count) (counter) = ((counter)+1) & ((max_count) - 1)
|
#define MOD_INC(counter, max_count) (counter) = ((counter)+1) & ((max_count) - 1)
|
||||||
|
|
||||||
|
@ -89,6 +89,10 @@ static struct dev_pci_struct memfree_pci_dev;
|
||||||
static struct device_buffers_st *dev_buffers_p;
|
static struct device_buffers_st *dev_buffers_p;
|
||||||
static struct device_ib_data_st dev_ib_data;
|
static struct device_ib_data_st dev_ib_data;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct map_icm_st icm_map_obj;
|
||||||
|
|
||||||
static int gw_write_cr(__u32 addr, __u32 data)
|
static int gw_write_cr(__u32 addr, __u32 data)
|
||||||
{
|
{
|
||||||
writel(htonl(data), memfree_pci_dev.cr_space + addr);
|
writel(htonl(data), memfree_pci_dev.cr_space + addr);
|
||||||
|
@ -850,6 +854,8 @@ static int setup_hca(__u8 port, void **eq_p)
|
||||||
eprintf("");
|
eprintf("");
|
||||||
goto undo_map_fa;
|
goto undo_map_fa;
|
||||||
}
|
}
|
||||||
|
icm_map_obj = map_obj;
|
||||||
|
|
||||||
phys_mem.offset += (1 << (map_obj.vpm_arr[0].log2_size + 12));
|
phys_mem.offset += (1 << (map_obj.vpm_arr[0].log2_size + 12));
|
||||||
|
|
||||||
init_hca.log_max_uars = log_max_uars;
|
init_hca.log_max_uars = log_max_uars;
|
||||||
|
@ -978,6 +984,30 @@ static int setup_hca(__u8 port, void **eq_p)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int unset_hca(void)
|
||||||
|
{
|
||||||
|
int rc, ret = 0;
|
||||||
|
|
||||||
|
rc = cmd_unmap_icm(&icm_map_obj);
|
||||||
|
if (rc)
|
||||||
|
eprintf("");
|
||||||
|
ret |= rc;
|
||||||
|
|
||||||
|
|
||||||
|
rc = cmd_unmap_icm_aux();
|
||||||
|
if (rc)
|
||||||
|
eprintf("");
|
||||||
|
ret |= rc;
|
||||||
|
|
||||||
|
rc = cmd_unmap_fa();
|
||||||
|
if (rc)
|
||||||
|
eprintf("");
|
||||||
|
ret |= rc;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void *get_inprm_buf(void)
|
static void *get_inprm_buf(void)
|
||||||
{
|
{
|
||||||
return dev_buffers_p->inprm_buf;
|
return dev_buffers_p->inprm_buf;
|
||||||
|
|
|
@ -357,52 +357,12 @@ static void modify_dhcp_resp(void *buf, __u16 size)
|
||||||
modify_udp_csum(buf, size);
|
modify_udp_csum(buf, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void get_my_client_id(__u8 * my_client_id)
|
|
||||||
{
|
|
||||||
|
|
||||||
my_client_id[0] = 0;
|
|
||||||
qpn2buf(ipoib_data.ipoib_qpn, my_client_id + 1);
|
|
||||||
memcpy(my_client_id + 4, ipoib_data.port_gid_raw, 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const __u8 *get_client_id(const void *buf, int len)
|
|
||||||
{
|
|
||||||
const __u8 *ptr;
|
|
||||||
int delta;
|
|
||||||
|
|
||||||
if (len < 268)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
/* pointer to just after magic cookie */
|
|
||||||
ptr = (const __u8 *)buf + 268;
|
|
||||||
|
|
||||||
/* find last client identifier option */
|
|
||||||
do {
|
|
||||||
if (ptr[0] == 255) {
|
|
||||||
/* found end of options list */
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ptr[0] == 0x3d) {
|
|
||||||
/* client identifer option */
|
|
||||||
return ptr + 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
delta = ptr[1] + 2;
|
|
||||||
ptr += delta;
|
|
||||||
len -= delta;
|
|
||||||
} while (len > 0);
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int handle_ipv4_packet(void *buf, void **out_buf_p,
|
static int handle_ipv4_packet(void *buf, void **out_buf_p,
|
||||||
unsigned int *new_size_p, int *is_bcast_p)
|
unsigned int *new_size_p, int *is_bcast_p)
|
||||||
{
|
{
|
||||||
void *new_buf;
|
void *new_buf;
|
||||||
__u16 new_size;
|
__u16 new_size;
|
||||||
__u8 msg_type;
|
__u8 msg_type;
|
||||||
__u8 my_client_id[20];
|
|
||||||
|
|
||||||
new_buf = (void *)(((__u8 *) buf) + 4);
|
new_buf = (void *)(((__u8 *) buf) + 4);
|
||||||
new_size = (*new_size_p) - 4;
|
new_size = (*new_size_p) - 4;
|
||||||
|
@ -411,7 +371,6 @@ static int handle_ipv4_packet(void *buf, void **out_buf_p,
|
||||||
|
|
||||||
if (get_ip_protocl(new_buf) == IP_PROT_UDP) {
|
if (get_ip_protocl(new_buf) == IP_PROT_UDP) {
|
||||||
__u16 udp_dst_port;
|
__u16 udp_dst_port;
|
||||||
const __u8 *client_id;
|
|
||||||
|
|
||||||
udp_dst_port = get_udp_dst_port(new_buf);
|
udp_dst_port = get_udp_dst_port(new_buf);
|
||||||
|
|
||||||
|
@ -420,22 +379,6 @@ static int handle_ipv4_packet(void *buf, void **out_buf_p,
|
||||||
*out_buf_p = 0;
|
*out_buf_p = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (udp_dst_port == 68) {
|
|
||||||
get_my_client_id(my_client_id);
|
|
||||||
|
|
||||||
/* packet client id */
|
|
||||||
client_id = get_client_id(new_buf, new_size);
|
|
||||||
if (!client_id) {
|
|
||||||
*out_buf_p = 0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (memcmp(client_id, my_client_id, 20)) {
|
|
||||||
*out_buf_p = 0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
msg_type = get_dhcp_msg_type(new_buf);
|
msg_type = get_dhcp_msg_type(new_buf);
|
||||||
|
@ -515,8 +458,9 @@ static int ipoib_handle_rcv(void *buf, void **out_buf_p,
|
||||||
rc = handle_ipv4_packet(buf, out_buf_p, new_size_p, is_bcast_p);
|
rc = handle_ipv4_packet(buf, out_buf_p, new_size_p, is_bcast_p);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
eprintf("prot=0x%x", prot_type);
|
tprintf("prot=0x%x", prot_type);
|
||||||
return -1;
|
*out_buf_p = NULL;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int is_null_mac(const __u8 * mac)
|
static int is_null_mac(const __u8 * mac)
|
||||||
|
|
|
@ -15,9 +15,9 @@ Skeleton NIC driver for Etherboot
|
||||||
/* to get the interface to the body of the program */
|
/* to get the interface to the body of the program */
|
||||||
#include "nic.h"
|
#include "nic.h"
|
||||||
/* to get the PCI support functions, if this is a PCI NIC */
|
/* to get the PCI support functions, if this is a PCI NIC */
|
||||||
#include <gpxe/pci.h>
|
#include "pci.h"
|
||||||
/* to get the ISA support functions, if this is an ISA NIC */
|
/* to get the ISA support functions, if this is an ISA NIC */
|
||||||
#include <gpxe/isa.h>
|
#include "isa.h"
|
||||||
|
|
||||||
#include "mt_version.c"
|
#include "mt_version.c"
|
||||||
#include "mt23108_imp.c"
|
#include "mt23108_imp.c"
|
||||||
|
@ -235,7 +235,7 @@ static struct pci_id tavor_nics[] = {
|
||||||
PCI_ROM(0x15b3, 0x6278, "MT25208", "MT25208 HCA driver"),
|
PCI_ROM(0x15b3, 0x6278, "MT25208", "MT25208 HCA driver"),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct pci_driver tavor_driver __pci_driver = {
|
static struct pci_driver tavor_driver __pci_driver = {
|
||||||
.type = NIC_DRIVER,
|
.type = NIC_DRIVER,
|
||||||
.name = "MT23108/MT25208",
|
.name = "MT23108/MT25208",
|
||||||
.probe = tavor_probe,
|
.probe = tavor_probe,
|
||||||
|
|
|
@ -15,9 +15,9 @@ Skeleton NIC driver for Etherboot
|
||||||
/* to get the interface to the body of the program */
|
/* to get the interface to the body of the program */
|
||||||
#include "nic.h"
|
#include "nic.h"
|
||||||
/* to get the PCI support functions, if this is a PCI NIC */
|
/* to get the PCI support functions, if this is a PCI NIC */
|
||||||
#include <gpxe/pci.h>
|
#include "pci.h"
|
||||||
/* to get the ISA support functions, if this is an ISA NIC */
|
/* to get the ISA support functions, if this is an ISA NIC */
|
||||||
#include <gpxe/isa.h>
|
#include "isa.h"
|
||||||
|
|
||||||
#include "mt_version.c"
|
#include "mt_version.c"
|
||||||
#include "mt25218_imp.c"
|
#include "mt25218_imp.c"
|
||||||
|
@ -235,7 +235,7 @@ static struct pci_id mt25218_nics[] = {
|
||||||
PCI_ROM(0x15b3, 0x6274, "MT25204", "MT25204 HCA driver"),
|
PCI_ROM(0x15b3, 0x6274, "MT25204", "MT25204 HCA driver"),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct pci_driver mt25218_driver __pci_driver = {
|
static struct pci_driver mt25218_driver __pci_driver = {
|
||||||
.type = NIC_DRIVER,
|
.type = NIC_DRIVER,
|
||||||
.name = "MT25218",
|
.name = "MT25218",
|
||||||
.probe = mt25218_probe,
|
.probe = mt25218_probe,
|
||||||
|
|
|
@ -26,7 +26,9 @@
|
||||||
#define MEMFREE_CMD_RUN_FW 0xff6
|
#define MEMFREE_CMD_RUN_FW 0xff6
|
||||||
#define MEMFREE_CMD_SET_ICM_SIZE 0xffd
|
#define MEMFREE_CMD_SET_ICM_SIZE 0xffd
|
||||||
#define MEMFREE_CMD_MAP_ICM_AUX 0xffc
|
#define MEMFREE_CMD_MAP_ICM_AUX 0xffc
|
||||||
|
#define MEMFREE_CMD_UNMAP_ICM_AUX 0xffb
|
||||||
#define MEMFREE_CMD_MAP_ICM 0xffa
|
#define MEMFREE_CMD_MAP_ICM 0xffa
|
||||||
|
#define MEMFREE_CMD_UNMAP_ICM 0xff9
|
||||||
#define MEMFREE_CMD_QUERY_DEV_LIM 0x003
|
#define MEMFREE_CMD_QUERY_DEV_LIM 0x003
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -20,4 +20,4 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* definition of the build version goes here */
|
/* definition of the build version goes here */
|
||||||
const char *build_revision= "113";
|
const char *build_revision= "191";
|
||||||
|
|
|
@ -1,17 +1,7 @@
|
||||||
diff -ru ../../orig/dhcp-3.0.4b2/common/options.c ./common/options.c
|
Index: dhcp-3.0.4b3/includes/site.h
|
||||||
--- ../../orig/dhcp-3.0.4b2/common/options.c 2005-11-02 01:19:03.000000000 +0200
|
===================================================================
|
||||||
+++ ./common/options.c 2005-12-06 14:38:17.000000000 +0200
|
--- dhcp-3.0.4b3.orig/includes/site.h 2002-03-12 20:33:39.000000000 +0200
|
||||||
@@ -537,6 +537,7 @@
|
+++ dhcp-3.0.4b3/includes/site.h 2006-03-15 12:50:00.000000000 +0200
|
||||||
priority_list [priority_len++] = DHO_DHCP_LEASE_TIME;
|
|
||||||
priority_list [priority_len++] = DHO_DHCP_MESSAGE;
|
|
||||||
priority_list [priority_len++] = DHO_DHCP_REQUESTED_ADDRESS;
|
|
||||||
+ priority_list [priority_len++] = DHO_DHCP_CLIENT_IDENTIFIER;
|
|
||||||
priority_list [priority_len++] = DHO_FQDN;
|
|
||||||
|
|
||||||
if (prl && prl -> len > 0) {
|
|
||||||
diff -ru ../../orig/dhcp-3.0.4b2/includes/site.h ./includes/site.h
|
|
||||||
--- ../../orig/dhcp-3.0.4b2/includes/site.h 2002-03-12 20:33:39.000000000 +0200
|
|
||||||
+++ ./includes/site.h 2005-12-06 14:36:55.000000000 +0200
|
|
||||||
@@ -135,7 +135,7 @@
|
@@ -135,7 +135,7 @@
|
||||||
the aforementioned problems do not matter to you, or if no other
|
the aforementioned problems do not matter to you, or if no other
|
||||||
API is supported for your system, you may want to go with it. */
|
API is supported for your system, you may want to go with it. */
|
||||||
|
|
Loading…
Reference in New Issue