📄 bcm570x_lm.h
字号:
/******************************************************************************//* *//* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 Broadcom *//* Corporation. *//* All rights reserved. *//* *//* This program is free software; you can redistribute it and/or modify *//* it under the terms of the GNU General Public License as published by *//* the Free Software Foundation, located in the file LICENSE. *//* *//* History: *//* 02/25/00 Hav Khauv Initial version. *//******************************************************************************/#ifndef LM_H#define LM_H#include "bcm570x_queue.h"#include "bcm570x_bits.h"/******************************************************************************//* Basic types. *//******************************************************************************/typedef char LM_CHAR, *PLM_CHAR;typedef unsigned int LM_UINT, *PLM_UINT;typedef unsigned char LM_UINT8, *PLM_UINT8;typedef unsigned short LM_UINT16, *PLM_UINT16;typedef unsigned int LM_UINT32, *PLM_UINT32;typedef unsigned int LM_COUNTER, *PLM_COUNTER;typedef void LM_VOID, *PLM_VOID;typedef char LM_BOOL, *PLM_BOOL;/* 64bit value. */typedef struct {#ifdef BIG_ENDIAN_HOST LM_UINT32 High; LM_UINT32 Low;#else /* BIG_ENDIAN_HOST */ LM_UINT32 Low; LM_UINT32 High;#endif /* !BIG_ENDIAN_HOST */} LM_UINT64, *PLM_UINT64;typedef LM_UINT64 LM_PHYSICAL_ADDRESS, *PLM_PHYSICAL_ADDRESS;/* void LM_INC_PHYSICAL_ADDRESS(PLM_PHYSICAL_ADDRESS pAddr,LM_UINT32 IncSize) */#define LM_INC_PHYSICAL_ADDRESS(pAddr, IncSize) \ { \ LM_UINT32 OrgLow; \ \ OrgLow = (pAddr)->Low; \ (pAddr)->Low += IncSize; \ if((pAddr)->Low < OrgLow) { \ (pAddr)->High++; /* Wrap around. */ \ } \ }#ifndef NULL#define NULL ((void *) 0)#endif /* NULL */#ifndef OFFSETOF#define OFFSETOF(_s, _m) (MM_UINT_PTR(&(((_s *) 0)->_m)))#endif /* OFFSETOF *//******************************************************************************//* Simple macros. *//******************************************************************************/#define IS_ETH_BROADCAST(_pEthAddr) \ (((unsigned char *) (_pEthAddr))[0] == ((unsigned char) 0xff))#define IS_ETH_MULTICAST(_pEthAddr) \ (((unsigned char *) (_pEthAddr))[0] & ((unsigned char) 0x01))#define IS_ETH_ADDRESS_EQUAL(_pEtherAddr1, _pEtherAddr2) \ ((((unsigned char *) (_pEtherAddr1))[0] == \ ((unsigned char *) (_pEtherAddr2))[0]) && \ (((unsigned char *) (_pEtherAddr1))[1] == \ ((unsigned char *) (_pEtherAddr2))[1]) && \ (((unsigned char *) (_pEtherAddr1))[2] == \ ((unsigned char *) (_pEtherAddr2))[2]) && \ (((unsigned char *) (_pEtherAddr1))[3] == \ ((unsigned char *) (_pEtherAddr2))[3]) && \ (((unsigned char *) (_pEtherAddr1))[4] == \ ((unsigned char *) (_pEtherAddr2))[4]) && \ (((unsigned char *) (_pEtherAddr1))[5] == \ ((unsigned char *) (_pEtherAddr2))[5]))#define COPY_ETH_ADDRESS(_Src, _Dst) \ ((unsigned char *) (_Dst))[0] = ((unsigned char *) (_Src))[0]; \ ((unsigned char *) (_Dst))[1] = ((unsigned char *) (_Src))[1]; \ ((unsigned char *) (_Dst))[2] = ((unsigned char *) (_Src))[2]; \ ((unsigned char *) (_Dst))[3] = ((unsigned char *) (_Src))[3]; \ ((unsigned char *) (_Dst))[4] = ((unsigned char *) (_Src))[4]; \ ((unsigned char *) (_Dst))[5] = ((unsigned char *) (_Src))[5];/******************************************************************************//* Constants. *//******************************************************************************/#define ETHERNET_ADDRESS_SIZE 6#define ETHERNET_PACKET_HEADER_SIZE 14#define MIN_ETHERNET_PACKET_SIZE 64 /* with 4 byte crc. */#define MAX_ETHERNET_PACKET_SIZE 1518 /* with 4 byte crc. */#define MIN_ETHERNET_PACKET_SIZE_NO_CRC 60#define MAX_ETHERNET_PACKET_SIZE_NO_CRC 1514#define MAX_ETHERNET_PACKET_BUFFER_SIZE 1536 /* A nice even number. */#ifndef LM_MAX_MC_TABLE_SIZE#define LM_MAX_MC_TABLE_SIZE 32#endif /* LM_MAX_MC_TABLE_SIZE */#define LM_MC_ENTRY_SIZE (ETHERNET_ADDRESS_SIZE+1)#define LM_MC_INSTANCE_COUNT_INDEX (LM_MC_ENTRY_SIZE-1)/* Receive filter masks. */#define LM_ACCEPT_UNICAST 0x0001#define LM_ACCEPT_MULTICAST 0x0002#define LM_ACCEPT_ALL_MULTICAST 0x0004#define LM_ACCEPT_BROADCAST 0x0008#define LM_ACCEPT_ERROR_PACKET 0x0010#define LM_PROMISCUOUS_MODE 0x10000/******************************************************************************//* PCI registers. *//******************************************************************************/#define PCI_VENDOR_ID_REG 0x00#define PCI_DEVICE_ID_REG 0x02#define PCI_COMMAND_REG 0x04#define PCI_IO_SPACE_ENABLE 0x0001#define PCI_MEM_SPACE_ENABLE 0x0002#define PCI_BUSMASTER_ENABLE 0x0004#define PCI_MEMORY_WRITE_INVALIDATE 0x0010#define PCI_PARITY_ERROR_ENABLE 0x0040#define PCI_SYSTEM_ERROR_ENABLE 0x0100#define PCI_FAST_BACK_TO_BACK_ENABLE 0x0200#define PCI_STATUS_REG 0x06#define PCI_REV_ID_REG 0x08#define PCI_CACHE_LINE_SIZE_REG 0x0c#define PCI_IO_BASE_ADDR_REG 0x10#define PCI_IO_BASE_ADDR_MASK 0xfffffff0#define PCI_MEM_BASE_ADDR_LOW 0x10#define PCI_MEM_BASE_ADDR_HIGH 0x14#define PCI_SUBSYSTEM_VENDOR_ID_REG 0x2c#define PCI_SUBSYSTEM_ID_REG 0x2e#define PCI_INT_LINE_REG 0x3c#define PCIX_CAP_REG 0x40#define PCIX_ENABLE_RELAXED_ORDERING BIT_17/******************************************************************************//* Fragment structure. *//******************************************************************************/typedef struct { LM_UINT32 FragSize; LM_PHYSICAL_ADDRESS FragBuf;} LM_FRAG, *PLM_FRAG;typedef struct { /* FragCount is initialized for the caller to the maximum array size, on */ /* return FragCount is the number of the actual fragments in the array. */ LM_UINT32 FragCount; /* Total buffer size. */ LM_UINT32 TotalSize; /* Fragment array buffer. */ LM_FRAG Fragments[1];} LM_FRAG_LIST, *PLM_FRAG_LIST;#define DECLARE_FRAG_LIST_BUFFER_TYPE(_FRAG_LIST_TYPE_NAME, _MAX_FRAG_COUNT) \ typedef struct { \ LM_FRAG_LIST FragList; \ LM_FRAG FragListBuffer[_MAX_FRAG_COUNT-1]; \ } _FRAG_LIST_TYPE_NAME, *P##_FRAG_LIST_TYPE_NAME/******************************************************************************//* Status codes. *//******************************************************************************/#define LM_STATUS_SUCCESS 0#define LM_STATUS_FAILURE 1#define LM_STATUS_INTERRUPT_ACTIVE 2#define LM_STATUS_INTERRUPT_NOT_ACTIVE 3#define LM_STATUS_LINK_ACTIVE 4#define LM_STATUS_LINK_DOWN 5#define LM_STATUS_LINK_SETTING_MISMATCH 6#define LM_STATUS_TOO_MANY_FRAGMENTS 7#define LM_STATUS_TRANSMIT_ABORTED 8#define LM_STATUS_TRANSMIT_ERROR 9#define LM_STATUS_RECEIVE_ABORTED 10#define LM_STATUS_RECEIVE_ERROR 11#define LM_STATUS_INVALID_PACKET_SIZE 12#define LM_STATUS_OUT_OF_MAP_REGISTERS 13#define LM_STATUS_UNKNOWN_ADAPTER 14typedef LM_UINT LM_STATUS, *PLM_STATUS;/******************************************************************************//* Requested media type. *//******************************************************************************/#define LM_REQUESTED_MEDIA_TYPE_AUTO 0#define LM_REQUESTED_MEDIA_TYPE_BNC 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -