iPXE
dm96xx.h File Reference

Davicom DM96xx USB Ethernet driver. More...

#include <ipxe/usb.h>
#include <ipxe/usbnet.h>
#include <ipxe/if_ether.h>

Go to the source code of this file.

Data Structures

struct  dm96xx_interrupt
 DM96xx interrupt data. More...
struct  dm96xx_rx_header
 DM96xx receive header. More...
struct  dm96xx_tx_header
 DM96xx transmit header. More...
struct  dm96xx_device
 A DM96xx network device. More...

Macros

#define DM96XX_READ_REGISTER
 Read register(s)
#define DM96XX_WRITE_REGISTER
 Write register(s)
#define DM96XX_WRITE1_REGISTER
 Write single register.
#define DM96XX_NCR   0x00
 Network control register.
#define DM96XX_NCR_RST   0x01
 Software reset.
#define DM96XX_NSR   0x01
 Network status register.
#define DM96XX_NSR_LINKST   0x40
 Link status.
#define DM96XX_RCR   0x05
 Receive control register.
#define DM96XX_RCR_ALL   0x08
 Pass all multicast.
#define DM96XX_RCR_RUNT   0x04
 Pass runt packet.
#define DM96XX_RCR_PRMSC   0x02
 Promiscuous mode.
#define DM96XX_RCR_RXEN   0x01
 RX enable.
#define DM96XX_RSR   0x06
 Receive status register.
#define DM96XX_RSR_MF   0x40
 Multicast frame.
#define DM96XX_PAR   0x10
 PHY address registers.
#define DM96XX_CHIPR   0x2c
 Chip revision register.
#define DM96XX_CHIPR_9601   0x00
 DM9601.
#define DM96XX_CHIPR_9620   0x01
 DM9620.
#define DM96XX_MODE_CTL   0x91
 RX header control/status register (DM9620+ only)
#define DM96XX_MODE_CTL_MODE   0x80
 4-byte header mode
#define DM96XX_RESET_DELAY_US   10
 Reset delay (in microseconds)
#define DM96XX_INTR_MAX_FILL   2
 Interrupt maximum fill level.
#define DM96XX_IN_MAX_FILL   8
 Bulk IN maximum fill level.
#define DM96XX_IN_MTU
 Bulk IN buffer size.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 FILE_SECBOOT (PERMITTED)
static int dm96xx_read_registers (struct dm96xx_device *dm96xx, unsigned int offset, void *data, size_t len)
 Read registers.
static int dm96xx_read_register (struct dm96xx_device *dm96xx, unsigned int offset)
 Read register.
static int dm96xx_write_registers (struct dm96xx_device *dm96xx, unsigned int offset, void *data, size_t len)
 Write registers.
static int dm96xx_write_register (struct dm96xx_device *dm96xx, unsigned int offset, uint8_t value)
 Write register.

Detailed Description

Davicom DM96xx USB Ethernet driver.

Definition in file dm96xx.h.

Macro Definition Documentation

◆ DM96XX_READ_REGISTER

#define DM96XX_READ_REGISTER
Value:
USB_REQUEST_TYPE ( 0x00 ) )
#define USB_DIR_IN
Data transfer is from device to host.
Definition usb.h:98
#define USB_RECIP_DEVICE
Request recipient is the device.
Definition usb.h:113
#define USB_TYPE_VENDOR
Vendor-specific request type.
Definition usb.h:107

Read register(s)

Definition at line 18 of file dm96xx.h.

18#define DM96XX_READ_REGISTER \
19 ( USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE | \
20 USB_REQUEST_TYPE ( 0x00 ) )

Referenced by dm96xx_read_registers().

◆ DM96XX_WRITE_REGISTER

#define DM96XX_WRITE_REGISTER
Value:
USB_REQUEST_TYPE ( 0x01 ) )
#define USB_DIR_OUT
Data transfer is from host to device.
Definition usb.h:95

Write register(s)

Definition at line 23 of file dm96xx.h.

23#define DM96XX_WRITE_REGISTER \
24 ( USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE | \
25 USB_REQUEST_TYPE ( 0x01 ) )

Referenced by dm96xx_write_registers().

◆ DM96XX_WRITE1_REGISTER

#define DM96XX_WRITE1_REGISTER
Value:
USB_REQUEST_TYPE ( 0x03 ) )

Write single register.

Definition at line 28 of file dm96xx.h.

28#define DM96XX_WRITE1_REGISTER \
29 ( USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE | \
30 USB_REQUEST_TYPE ( 0x03 ) )

Referenced by dm96xx_write_register().

◆ DM96XX_NCR

#define DM96XX_NCR   0x00

Network control register.

Definition at line 33 of file dm96xx.h.

Referenced by dm96xx_reset().

◆ DM96XX_NCR_RST

#define DM96XX_NCR_RST   0x01

Software reset.

Definition at line 34 of file dm96xx.h.

Referenced by dm96xx_reset().

◆ DM96XX_NSR

#define DM96XX_NSR   0x01

Network status register.

Definition at line 37 of file dm96xx.h.

Referenced by dm96xx_check_link().

◆ DM96XX_NSR_LINKST

#define DM96XX_NSR_LINKST   0x40

Link status.

Definition at line 38 of file dm96xx.h.

Referenced by dm96xx_link_nsr().

◆ DM96XX_RCR

#define DM96XX_RCR   0x05

Receive control register.

Definition at line 41 of file dm96xx.h.

Referenced by dm96xx_open().

◆ DM96XX_RCR_ALL

#define DM96XX_RCR_ALL   0x08

Pass all multicast.

Definition at line 42 of file dm96xx.h.

Referenced by dm96xx_open().

◆ DM96XX_RCR_RUNT

#define DM96XX_RCR_RUNT   0x04

Pass runt packet.

Definition at line 43 of file dm96xx.h.

Referenced by dm96xx_open().

◆ DM96XX_RCR_PRMSC

#define DM96XX_RCR_PRMSC   0x02

Promiscuous mode.

Definition at line 44 of file dm96xx.h.

Referenced by dm96xx_open().

◆ DM96XX_RCR_RXEN

#define DM96XX_RCR_RXEN   0x01

RX enable.

Definition at line 45 of file dm96xx.h.

Referenced by dm96xx_open().

◆ DM96XX_RSR

#define DM96XX_RSR   0x06

Receive status register.

Definition at line 48 of file dm96xx.h.

◆ DM96XX_RSR_MF

#define DM96XX_RSR_MF   0x40

Multicast frame.

Definition at line 49 of file dm96xx.h.

Referenced by dm96xx_in_complete().

◆ DM96XX_PAR

#define DM96XX_PAR   0x10

PHY address registers.

Definition at line 52 of file dm96xx.h.

Referenced by dm96xx_read_mac(), and dm96xx_write_mac().

◆ DM96XX_CHIPR

#define DM96XX_CHIPR   0x2c

Chip revision register.

Definition at line 55 of file dm96xx.h.

Referenced by dm96xx_rx_mode().

◆ DM96XX_CHIPR_9601

#define DM96XX_CHIPR_9601   0x00

DM9601.

Definition at line 56 of file dm96xx.h.

Referenced by dm96xx_rx_mode().

◆ DM96XX_CHIPR_9620

#define DM96XX_CHIPR_9620   0x01

DM9620.

Definition at line 57 of file dm96xx.h.

◆ DM96XX_MODE_CTL

#define DM96XX_MODE_CTL   0x91

RX header control/status register (DM9620+ only)

Definition at line 60 of file dm96xx.h.

Referenced by dm96xx_rx_mode().

◆ DM96XX_MODE_CTL_MODE

#define DM96XX_MODE_CTL_MODE   0x80

4-byte header mode

Definition at line 61 of file dm96xx.h.

Referenced by dm96xx_rx_mode().

◆ DM96XX_RESET_DELAY_US

#define DM96XX_RESET_DELAY_US   10

Reset delay (in microseconds)

Definition at line 176 of file dm96xx.h.

Referenced by dm96xx_reset().

◆ DM96XX_INTR_MAX_FILL

#define DM96XX_INTR_MAX_FILL   2

Interrupt maximum fill level.

This is a policy decision.

Definition at line 182 of file dm96xx.h.

Referenced by dm96xx_probe().

◆ DM96XX_IN_MAX_FILL

#define DM96XX_IN_MAX_FILL   8

Bulk IN maximum fill level.

This is a policy decision.

Definition at line 188 of file dm96xx.h.

Referenced by dm96xx_probe().

◆ DM96XX_IN_MTU

#define DM96XX_IN_MTU
Value:
( 4 /* DM96xx header */ + ETH_FRAME_LEN + \
4 /* possible VLAN header */ + 4 /* CRC */ )
#define ETH_FRAME_LEN
Definition if_ether.h:12

Bulk IN buffer size.

Definition at line 191 of file dm96xx.h.

191#define DM96XX_IN_MTU \
192 ( 4 /* DM96xx header */ + ETH_FRAME_LEN + \
193 4 /* possible VLAN header */ + 4 /* CRC */ )

Referenced by dm96xx_probe().

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )

◆ dm96xx_read_registers()

int dm96xx_read_registers ( struct dm96xx_device * dm96xx,
unsigned int offset,
void * data,
size_t len )
inlinestatic

Read registers.

Parameters
dm96xxDM96xx device
offsetRegister offset
dataData buffer
lenLength of data
Return values
rcReturn status code

Definition at line 117 of file dm96xx.h.

118 {
119
120 return usb_control ( dm96xx->usb, DM96XX_READ_REGISTER, 0, offset,
121 data, len );
122}
uint16_t offset
Offset to command line.
Definition bzimage.h:3
#define DM96XX_READ_REGISTER
Read register(s)
Definition dm96xx.h:18
ring len
Length.
Definition dwmac.h:226
uint8_t data[48]
Additional event data.
Definition ena.h:11
struct usb_device * usb
USB device.
Definition dm96xx.h:98
int usb_control(struct usb_device *usb, unsigned int request, unsigned int value, unsigned int index, void *data, size_t len)
Issue USB control transaction.
Definition usb.c:784

References data, DM96XX_READ_REGISTER, len, offset, dm96xx_device::usb, and usb_control().

Referenced by dm96xx_read_mac(), and dm96xx_read_register().

◆ dm96xx_read_register()

int dm96xx_read_register ( struct dm96xx_device * dm96xx,
unsigned int offset )
inlinestatic

Read register.

Parameters
dm96xxDM96xx device
offsetRegister offset
Return values
valueRegister value, or negative error

Definition at line 132 of file dm96xx.h.

132 {
134 int rc;
135
136 if ( ( rc = dm96xx_read_registers ( dm96xx, offset, &value,
137 sizeof ( value ) ) ) != 0 )
138 return rc;
139 return value;
140}
struct arbelprm_rc_send_wqe rc
Definition arbel.h:3
pseudo_bit_t value[0x00020]
Definition arbel.h:2
unsigned char uint8_t
Definition stdint.h:10
static int dm96xx_read_registers(struct dm96xx_device *dm96xx, unsigned int offset, void *data, size_t len)
Read registers.
Definition dm96xx.h:117

References dm96xx_read_registers(), offset, rc, and value.

Referenced by dm96xx_check_link(), dm96xx_reset(), and dm96xx_rx_mode().

◆ dm96xx_write_registers()

int dm96xx_write_registers ( struct dm96xx_device * dm96xx,
unsigned int offset,
void * data,
size_t len )
inlinestatic

Write registers.

Parameters
dm96xxDM96xx device
offsetRegister offset
dataData buffer
lenLength of data
Return values
rcReturn status code

Definition at line 152 of file dm96xx.h.

153 {
154
155 return usb_control ( dm96xx->usb, DM96XX_WRITE_REGISTER, 0, offset,
156 data, len );
157}
#define DM96XX_WRITE_REGISTER
Write register(s)
Definition dm96xx.h:23

References data, DM96XX_WRITE_REGISTER, len, offset, dm96xx_device::usb, and usb_control().

Referenced by dm96xx_write_mac().

◆ dm96xx_write_register()

int dm96xx_write_register ( struct dm96xx_device * dm96xx,
unsigned int offset,
uint8_t value )
inlinestatic

Write register.

Parameters
dm96xxDM96xx device
offsetRegister offset
valueRegister value
Return values
rcReturn status code

Definition at line 168 of file dm96xx.h.

169 {
170
171 return usb_control ( dm96xx->usb, DM96XX_WRITE1_REGISTER, value,
172 offset, NULL, 0 );
173}
#define NULL
NULL pointer (VOID *)
Definition Base.h:322
#define DM96XX_WRITE1_REGISTER
Write single register.
Definition dm96xx.h:28

References DM96XX_WRITE1_REGISTER, NULL, offset, dm96xx_device::usb, usb_control(), and value.

Referenced by dm96xx_open(), dm96xx_reset(), and dm96xx_rx_mode().