Fork of Smoothie to port to mbed non-LPC targets.
Fork of Smoothie by
libs/Network/Drivers/LPC17XX_Ethernet.h@2:1df0b61d3b5a, 2014-02-28 (annotated)
- Committer:
- Michael J. Spencer
- Date:
- Fri Feb 28 18:52:52 2014 -0800
- Revision:
- 2:1df0b61d3b5a
Update to latest Smoothie.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Michael J. Spencer |
2:1df0b61d3b5a | 1 | #ifndef _LPC17XX_ETHERNET_H |
Michael J. Spencer |
2:1df0b61d3b5a | 2 | #define _LPC17XX_ETHERNET_H |
Michael J. Spencer |
2:1df0b61d3b5a | 3 | |
Michael J. Spencer |
2:1df0b61d3b5a | 4 | #include "lpc17xx_emac.h" |
Michael J. Spencer |
2:1df0b61d3b5a | 5 | |
Michael J. Spencer |
2:1df0b61d3b5a | 6 | #include "Module.h" |
Michael J. Spencer |
2:1df0b61d3b5a | 7 | #include "net_util.h" |
Michael J. Spencer |
2:1df0b61d3b5a | 8 | |
Michael J. Spencer |
2:1df0b61d3b5a | 9 | #define EMAC_SMSC_8720A 0x0007C0F0 |
Michael J. Spencer |
2:1df0b61d3b5a | 10 | |
Michael J. Spencer |
2:1df0b61d3b5a | 11 | // SMSC 8720A special control/status register |
Michael J. Spencer |
2:1df0b61d3b5a | 12 | #define EMAC_PHY_REG_SCSR 0x1F |
Michael J. Spencer |
2:1df0b61d3b5a | 13 | |
Michael J. Spencer |
2:1df0b61d3b5a | 14 | #define LPC17XX_MAX_PACKET 600 |
Michael J. Spencer |
2:1df0b61d3b5a | 15 | #define LPC17XX_TXBUFS 4 |
Michael J. Spencer |
2:1df0b61d3b5a | 16 | #define LPC17XX_RXBUFS 4 |
Michael J. Spencer |
2:1df0b61d3b5a | 17 | |
Michael J. Spencer |
2:1df0b61d3b5a | 18 | typedef struct { |
Michael J. Spencer |
2:1df0b61d3b5a | 19 | void* packet; |
Michael J. Spencer |
2:1df0b61d3b5a | 20 | uint32_t control; |
Michael J. Spencer |
2:1df0b61d3b5a | 21 | } packet_desc; |
Michael J. Spencer |
2:1df0b61d3b5a | 22 | |
Michael J. Spencer |
2:1df0b61d3b5a | 23 | typedef struct { |
Michael J. Spencer |
2:1df0b61d3b5a | 24 | uint8_t buf[LPC17XX_RXBUFS][LPC17XX_MAX_PACKET]; |
Michael J. Spencer |
2:1df0b61d3b5a | 25 | RX_Stat rxstat[LPC17XX_RXBUFS]; |
Michael J. Spencer |
2:1df0b61d3b5a | 26 | packet_desc rxdesc[LPC17XX_RXBUFS]; |
Michael J. Spencer |
2:1df0b61d3b5a | 27 | } _rxbuf_t; |
Michael J. Spencer |
2:1df0b61d3b5a | 28 | |
Michael J. Spencer |
2:1df0b61d3b5a | 29 | typedef struct { |
Michael J. Spencer |
2:1df0b61d3b5a | 30 | uint8_t buf[LPC17XX_TXBUFS][LPC17XX_MAX_PACKET]; |
Michael J. Spencer |
2:1df0b61d3b5a | 31 | TX_Stat txstat[LPC17XX_TXBUFS]; |
Michael J. Spencer |
2:1df0b61d3b5a | 32 | packet_desc txdesc[LPC17XX_TXBUFS]; |
Michael J. Spencer |
2:1df0b61d3b5a | 33 | } _txbuf_t; |
Michael J. Spencer |
2:1df0b61d3b5a | 34 | |
Michael J. Spencer |
2:1df0b61d3b5a | 35 | class LPC17XX_Ethernet; |
Michael J. Spencer |
2:1df0b61d3b5a | 36 | |
Michael J. Spencer |
2:1df0b61d3b5a | 37 | class LPC17XX_Ethernet : public Module, public NetworkInterface |
Michael J. Spencer |
2:1df0b61d3b5a | 38 | { |
Michael J. Spencer |
2:1df0b61d3b5a | 39 | public: |
Michael J. Spencer |
2:1df0b61d3b5a | 40 | LPC17XX_Ethernet(); |
Michael J. Spencer |
2:1df0b61d3b5a | 41 | |
Michael J. Spencer |
2:1df0b61d3b5a | 42 | void on_module_loaded(); |
Michael J. Spencer |
2:1df0b61d3b5a | 43 | void on_idle(void*); |
Michael J. Spencer |
2:1df0b61d3b5a | 44 | void on_second_tick(void*); |
Michael J. Spencer |
2:1df0b61d3b5a | 45 | |
Michael J. Spencer |
2:1df0b61d3b5a | 46 | void emac_init(void) __attribute__ ((optimize("O0"))); |
Michael J. Spencer |
2:1df0b61d3b5a | 47 | |
Michael J. Spencer |
2:1df0b61d3b5a | 48 | void set_mac(uint8_t*); |
Michael J. Spencer |
2:1df0b61d3b5a | 49 | |
Michael J. Spencer |
2:1df0b61d3b5a | 50 | void irq(void); |
Michael J. Spencer |
2:1df0b61d3b5a | 51 | |
Michael J. Spencer |
2:1df0b61d3b5a | 52 | bool _receive_frame(void *packet, int* size); |
Michael J. Spencer |
2:1df0b61d3b5a | 53 | |
Michael J. Spencer |
2:1df0b61d3b5a | 54 | // NetworkInterface methods |
Michael J. Spencer |
2:1df0b61d3b5a | 55 | // void provide_net(netcore* n); |
Michael J. Spencer |
2:1df0b61d3b5a | 56 | bool can_read_packet(void); |
Michael J. Spencer |
2:1df0b61d3b5a | 57 | int read_packet(uint8_t**); |
Michael J. Spencer |
2:1df0b61d3b5a | 58 | void release_read_packet(uint8_t*); |
Michael J. Spencer |
2:1df0b61d3b5a | 59 | void periodical(int); |
Michael J. Spencer |
2:1df0b61d3b5a | 60 | |
Michael J. Spencer |
2:1df0b61d3b5a | 61 | bool can_write_packet(void); |
Michael J. Spencer |
2:1df0b61d3b5a | 62 | int write_packet(uint8_t *, int); |
Michael J. Spencer |
2:1df0b61d3b5a | 63 | |
Michael J. Spencer |
2:1df0b61d3b5a | 64 | void* request_packet_buffer(void); |
Michael J. Spencer |
2:1df0b61d3b5a | 65 | |
Michael J. Spencer |
2:1df0b61d3b5a | 66 | // Encapsulator methods |
Michael J. Spencer |
2:1df0b61d3b5a | 67 | int receive(NetworkInterface* ni, NET_PACKET, int); |
Michael J. Spencer |
2:1df0b61d3b5a | 68 | int construct(NetworkInterface* ni, NET_PACKET, int); |
Michael J. Spencer |
2:1df0b61d3b5a | 69 | NET_PACKET get_new_packet_buffer(NetworkInterface*); |
Michael J. Spencer |
2:1df0b61d3b5a | 70 | NET_PAYLOAD get_payload_buffer(NET_PACKET); |
Michael J. Spencer |
2:1df0b61d3b5a | 71 | void set_payload_length(NET_PACKET, int); |
Michael J. Spencer |
2:1df0b61d3b5a | 72 | |
Michael J. Spencer |
2:1df0b61d3b5a | 73 | static LPC17XX_Ethernet* instance; |
Michael J. Spencer |
2:1df0b61d3b5a | 74 | |
Michael J. Spencer |
2:1df0b61d3b5a | 75 | private: |
Michael J. Spencer |
2:1df0b61d3b5a | 76 | static _rxbuf_t rxbuf; |
Michael J. Spencer |
2:1df0b61d3b5a | 77 | static _txbuf_t txbuf; |
Michael J. Spencer |
2:1df0b61d3b5a | 78 | |
Michael J. Spencer |
2:1df0b61d3b5a | 79 | void check_interface(); |
Michael J. Spencer |
2:1df0b61d3b5a | 80 | }; |
Michael J. Spencer |
2:1df0b61d3b5a | 81 | |
Michael J. Spencer |
2:1df0b61d3b5a | 82 | #endif /* _LPC17XX_ETHERNET_H */ |