1 | /************************************************************************** |
---|
2 | |
---|
3 | Copyright (c) 2001-2005, Intel Corporation |
---|
4 | All rights reserved. |
---|
5 | |
---|
6 | Redistribution and use in source and binary forms, with or without |
---|
7 | modification, are permitted provided that the following conditions are met: |
---|
8 | |
---|
9 | 1. Redistributions of source code must retain the above copyright notice, |
---|
10 | this list of conditions and the following disclaimer. |
---|
11 | |
---|
12 | 2. Redistributions in binary form must reproduce the above copyright |
---|
13 | notice, this list of conditions and the following disclaimer in the |
---|
14 | documentation and/or other materials provided with the distribution. |
---|
15 | |
---|
16 | 3. Neither the name of the Intel Corporation nor the names of its |
---|
17 | contributors may be used to endorse or promote products derived from |
---|
18 | this software without specific prior written permission. |
---|
19 | |
---|
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
---|
21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
---|
22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
---|
23 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
---|
24 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
---|
25 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
---|
26 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
---|
27 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
---|
28 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
---|
29 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
---|
30 | POSSIBILITY OF SUCH DAMAGE. |
---|
31 | |
---|
32 | ***************************************************************************/ |
---|
33 | |
---|
34 | /*$FreeBSD: /repoman/r/ncvs/src/sys/dev/em/if_em_osdep.h,v 1.14 2005/05/26 23:32:02 tackerman Exp $*/ |
---|
35 | |
---|
36 | #ifndef _RTEMS_OS_H_ |
---|
37 | #define _RTEMS_OS_H_ |
---|
38 | |
---|
39 | #include <rtems.h> |
---|
40 | #include "../porting/rtemscompat.h" |
---|
41 | |
---|
42 | #include <sys/types.h> |
---|
43 | #include <sys/param.h> |
---|
44 | #include <sys/systm.h> |
---|
45 | #include <sys/mbuf.h> |
---|
46 | #include <sys/protosw.h> |
---|
47 | #include <sys/socket.h> |
---|
48 | #include <sys/malloc.h> |
---|
49 | #include <sys/kernel.h> |
---|
50 | #include <bsp/pci.h> |
---|
51 | |
---|
52 | /* Eventually, we should include this |
---|
53 | #include <rtems/rtems-mii-ioctl.h> |
---|
54 | */ |
---|
55 | #define IFM_LINK_OK IFM_FLAG0 |
---|
56 | #define IFM_ANEG_DIS IFM_FLAG1 |
---|
57 | |
---|
58 | #define ASSERT(x) if(!(x)) panic("EM: x") |
---|
59 | |
---|
60 | /* The happy-fun DELAY macro is defined in /usr/src/sys/i386/include/clock.h */ |
---|
61 | #define usec_delay(x) DELAY(x) |
---|
62 | #define msec_delay(x) DELAY(1000*(x)) |
---|
63 | /* TODO: Should we be paranoid about delaying in interrupt context? */ |
---|
64 | #define msec_delay_irq(x) DELAY(1000*(x)) |
---|
65 | |
---|
66 | #define MSGOUT(S, A, B) printf(S "\n", A, B) |
---|
67 | #define DEBUGFUNC(F) DEBUGOUT(F); |
---|
68 | #if DBG |
---|
69 | #define DEBUGOUT(S) printf(S "\n") |
---|
70 | #define DEBUGOUT1(S,A) printf(S "\n",A) |
---|
71 | #define DEBUGOUT2(S,A,B) printf(S "\n",A,B) |
---|
72 | #define DEBUGOUT3(S,A,B,C) printf(S "\n",A,B,C) |
---|
73 | #define bootverbose (1) |
---|
74 | #define DEBUGOUT7(S,A,B,C,D,E,F,G) printf(S "\n",A,B,C,D,E,F,G) |
---|
75 | #else |
---|
76 | #define DEBUGOUT(S) |
---|
77 | #define DEBUGOUT1(S,A) |
---|
78 | #define DEBUGOUT2(S,A,B) |
---|
79 | #define DEBUGOUT3(S,A,B,C) |
---|
80 | #define bootverbose (0) |
---|
81 | #define DEBUGOUT7(S,A,B,C,D,E,F,G) |
---|
82 | #endif |
---|
83 | |
---|
84 | #define CMD_MEM_WRT_INVALIDATE 0x0010 /* BIT_4 */ |
---|
85 | #define PCI_COMMAND_REGISTER PCIR_COMMAND |
---|
86 | |
---|
87 | struct em_osdep |
---|
88 | { |
---|
89 | unsigned mem_bus_space_handle; |
---|
90 | device_t dev; |
---|
91 | }; |
---|
92 | |
---|
93 | struct rtems_ifmedia { |
---|
94 | int ifm_media; |
---|
95 | }; |
---|
96 | |
---|
97 | #define E1000_WRITE_FLUSH(hw) E1000_READ_REG(hw, STATUS) |
---|
98 | |
---|
99 | /* Read from an absolute offset in the adapter's memory space */ |
---|
100 | #define E1000_READ_OFFSET(hw, offset) \ |
---|
101 | bus_space_read_4( ((struct em_osdep *)(hw)->back)->mem_bus_space_tag, \ |
---|
102 | ((struct em_osdep *)(hw)->back)->mem_bus_space_handle, \ |
---|
103 | offset) |
---|
104 | |
---|
105 | /* Write to an absolute offset in the adapter's memory space */ |
---|
106 | #define E1000_WRITE_OFFSET(hw, offset, value) \ |
---|
107 | bus_space_write_4( ((struct em_osdep *)(hw)->back)->mem_bus_space_tag, \ |
---|
108 | ((struct em_osdep *)(hw)->back)->mem_bus_space_handle, \ |
---|
109 | offset, \ |
---|
110 | value) |
---|
111 | |
---|
112 | /* Convert a register name to its offset in the adapter's memory space */ |
---|
113 | #define E1000_REG_OFFSET(hw, reg) \ |
---|
114 | ((hw)->mac_type >= em_82543 ? E1000_##reg : E1000_82542_##reg) |
---|
115 | |
---|
116 | #define E1000_READ_REG(hw, reg) \ |
---|
117 | E1000_READ_OFFSET(hw, E1000_REG_OFFSET(hw, reg)) |
---|
118 | |
---|
119 | #define E1000_WRITE_REG(hw, reg, value) \ |
---|
120 | E1000_WRITE_OFFSET(hw, E1000_REG_OFFSET(hw, reg), value) |
---|
121 | |
---|
122 | #define E1000_READ_REG_ARRAY(hw, reg, index) \ |
---|
123 | E1000_READ_OFFSET(hw, E1000_REG_OFFSET(hw, reg) + ((index) << 2)) |
---|
124 | |
---|
125 | #define E1000_READ_REG_ARRAY_DWORD E1000_READ_REG_ARRAY |
---|
126 | |
---|
127 | #define E1000_WRITE_REG_ARRAY(hw, reg, index, value) \ |
---|
128 | E1000_WRITE_OFFSET(hw, E1000_REG_OFFSET(hw, reg) + ((index) << 2), value) |
---|
129 | |
---|
130 | #define E1000_WRITE_REG_ARRAY_BYTE(hw, reg, index, value) \ |
---|
131 | bus_space_write_1( ((struct em_osdep *)(hw)->back)->mem_bus_space_tag, \ |
---|
132 | ((struct em_osdep *)(hw)->back)->mem_bus_space_handle, \ |
---|
133 | E1000_REG_OFFSET(hw, reg) + (index), \ |
---|
134 | value) |
---|
135 | |
---|
136 | #define E1000_WRITE_REG_ARRAY_WORD(hw, reg, index, value) \ |
---|
137 | bus_space_write_2( ((struct em_osdep *)(hw)->back)->mem_bus_space_tag, \ |
---|
138 | ((struct em_osdep *)(hw)->back)->mem_bus_space_handle, \ |
---|
139 | E1000_REG_OFFSET(hw, reg) + (index), \ |
---|
140 | value) |
---|
141 | |
---|
142 | #define E1000_WRITE_REG_ARRAY_DWORD(hw, reg, index, value) \ |
---|
143 | E1000_WRITE_OFFSET(hw, E1000_REG_OFFSET(hw, reg) + ((index) << 2), value) |
---|
144 | |
---|
145 | #endif /* _FREEBSD_OS_H_ */ |
---|
146 | |
---|