GLDv2 MAC 信息 (gld_mac_info) 结构是用于链接特定于设备的驱动程序与 GLDv2 的主数据接口。此结构包含 GLDv2 所需的数据,以及指向可选的其他特定于驱动程序的信息结构的指针。
可使用 gld_mac_alloc 分配 gld_mac_info() 结构,可使用 gld_mac_free() 解除分配此结构。驱动程序不能做出有关此结构长度的任何假设,因为此长度在不同发行版的 Solaris OS 和/或 GLDv2 中可能会有所不同。专用于 GLDv2 的结构成员(未在此处介绍)既不应该由特定于设备的驱动程序设置,也不应该由其读取。
gld_mac_info(9S) 结构包含以下字段。
caddr_t gldm_private; /* Driver private data */ int (*gldm_reset)(); /* Reset device */ int (*gldm_start)(); /* Start device */ int (*gldm_stop)(); /* Stop device */ int (*gldm_set_mac_addr)(); /* Set device phys addr */ int (*gldm_set_multicast)(); /* Set/delete multicast addr */ int (*gldm_set_promiscuous)(); /* Set/reset promiscuous mode */ int (*gldm_send)(); /* Transmit routine */ uint_t (*gldm_intr)(); /* Interrupt handler */ int (*gldm_get_stats)(); /* Get device statistics */ int (*gldm_ioctl)(); /* Driver-specific ioctls */ char *gldm_ident; /* Driver identity string */ uint32_t gldm_type; /* Device type */ uint32_t gldm_minpkt; /* Minimum packet size */ /* accepted by driver */ uint32_t gldm_maxpkt; /* Maximum packet size */ /* accepted by driver */ uint32_t gldm_addrlen; /* Physical address length */ int32_t gldm_saplen; /* SAP length for DL_INFO_ACK */ unsigned char *gldm_broadcast_addr; /* Physical broadcast addr */ unsigned char *gldm_vendor_addr; /* Factory MAC address */ t_uscalar_t gldm_ppa; /* Physical Point of */ /* Attachment (PPA) number */ dev_info_t *gldm_devinfo; /* Pointer to device's */ /* dev_info node */ ddi_iblock_cookie_t gldm_cookie; /* Device's interrupt */ /* block cookie */
gldm_private 结构成员对设备驱动程序可见。gldm_private 还专用于特定于设备的驱动程序。GLDv2 无法使用或修改 gldm_private。通常,gldm_private 用作指向专用数据的指针,指向同时由驱动程序定义和分配的每个实例的数据结构。
以下结构成员组必须由驱动程序在调用 gld_register() 之前设置,并且此后不应该由驱动程序进行修改。由于 gld_register() 可能会使用或高速缓存结构成员的值,因此,驱动程序在调用 gld_register() 之后进行的更改可能会导致不可预测的结果。有关这些结构的更多信息,请参见 gld(9E) 手册页。
指向驱动程序入口点的指针。
指向驱动程序入口点的指针。
指向驱动程序入口点的指针。
指向驱动程序入口点的指针。
指向驱动程序入口点的指针。
指向驱动程序入口点的指针。
指向驱动程序入口点的指针。
指向驱动程序入口点的指针。
指向驱动程序入口点的指针。
指向驱动程序入口点的指针。允许此指针为 null。
指向包含设备简短说明的字符串的指针。此指针用于在系统消息中标识设备。
驱动程序处理的设备的类型。GLDv2 目前支持以下值:
DL_ETHER(ISO 8802-3 (IEEE 802.3) 和以太网总线)
DL_TPR(IEEE 802.5 令牌传递环)
DL_FDDI(ISO 9314-2 光纤分布式数据接口)
必须正确设置此结构成员,GLDv2 才能正常运行。
最小服务数据单元大小:设备可以传输的最小包大小(不包括 MAC 头)。如果特定于设备的驱动程序处理任何所需的填充,则允许此大小为 0。
最大服务数据单元大小:设备可以传输的最大包大小(不包括 MAC 头)。对于以太网,此数值为 1500。
设备所处理的物理地址的长度(以字节为单位)。对于以太网、令牌环和 FDDI,此结构成员的值应该为 6。
驱动程序所使用的 SAP 地址的长度(以字节为单位)。对于基于 GLDv2 的驱动程序,应该始终将长度设置为 -2。长度为 -2 表示支持 2 个字节的 SAP 值,并且 SAP 出现在 DLSAP 地址中的物理地址之后。有关更多详细信息,请参见 DLPI 规范中的附录 A.2“消息 DL_INFO_ACK”。
指向长度 gldm_addrlen 字节数组的指针,该数组包含要用于传输的广播地址。驱动程序必须提供保存广播地址的空间,使用相应的值填充此空间,并将 gldm_broadcast_addr 设置为指向此地址。对于以太网、令牌环和 FDDI,广播地址通常为 0xFF-FF-FF-FF-FF-FF。
指向长度为 gldm_addrlen 字节的数组的指针,该数组包含供应商提供的设备网络物理地址。驱动程序必须提供保存地址的空间,使用来自设备的信息填充此空间,并将 gldm_vendor_addr 设置为指向此地址。
此设备实例的 PPA 编号。应该始终将 PPA 编号设置为从 ddi_get_instance(9F) 返回的实例编号。
指向此设备的 dev_info 节点的指针。
以下例程之一返回的中断块 cookie:
此 cookie 必须对应于设备的接收中断,可从该中断中调用 gld_recv()。