Chapter 46. generic ethernet device driver, Generic ethernet api, Generic ethernet device driver – Comtrol eCos User Manual

Page 601

Advertising
background image

Chapter 46. Generic Ethernet Device Driver

Generic Ethernet API

This file provides a simple description of how to write a low-level, hardware dependent ethernet driver.

There is a high-level driver (which is only code — with no state of its own) that is part of the stack. There will be
one or more low-level drivers tied to the actual network hardware. Each of these drivers contains one or more driver
instances. The intent is that the low-level drivers know nothing of the details of the stack that will be using them.
Thus, the same driver can be used by the eCos supported TCP/IP stack, RedBoot, or any other, with no changes.

A driver instance is contained within a struct eth_drv_sc:

struct eth_hwr_funs {

// Initialize hardware (including startup)

void (*start)(struct eth_drv_sc *sc,

unsigned char *enaddr,

int flags);

// Shut down hardware

void (*stop)(struct eth_drv_sc *sc);

// Device control (ioctl pass-thru)

int

(*control)(struct eth_drv_sc *sc,

unsigned long key,

void *data,

int

data_length);

// Query - can a packet be sent?

int

(*can_send)(struct eth_drv_sc *sc);

// Send a packet of data

void (*send)(struct eth_drv_sc *sc,

struct eth_drv_sg *sg_list,

int sg_len,

int total_len,

unsigned long key);

// Receive [unload] a packet of data

void (*recv)(struct eth_drv_sc *sc,

struct eth_drv_sg *sg_list,

int sg_len);

// Deliver data to/from device from/to stack memory space

// (moves lots of memcpy()s out of DSRs into thread)

void (*deliver)(struct eth_drv_sc *sc);

// Poll for interrupts/device service

void (*poll)(struct eth_drv_sc *sc);

// Get interrupt information from hardware driver

int (*int_vector)(struct eth_drv_sc *sc);

// Logical driver interface

struct eth_drv_funs *eth_drv, *eth_drv_old;

};

struct eth_drv_sc {

struct eth_hwr_funs *funs;

void

*driver_private;

const char

*dev_name;

int

state;

497

Advertising