Chameleon

Chameleon Svn Source Tree

Root/branches/ErmaC/Enoch/i386/libsaio/networking.c

1/*
2 * Copyright (c) 2009 Evan Lojewski. All rights reserved.
3 *
4 * Merge into file from module compcept by ErmaC and Marchrius
5 *
6 */
7
8#include "boot.h"
9#include "bootstruct.h"
10#include "pci.h"
11#include "platform.h"
12#include "device_inject.h"
13#include "networking.h"
14
15#ifndef DEBUG_NETWORKING
16#define DEBUG_NETWORKING 0
17#endif
18
19#if DEBUG_NETWORKING
20#define DBG(x...)printf(x)
21#else
22#define DBG(x...)
23#endif
24
25uint32_t builtin_set= 0;
26uint8_t builtin= 0;
27extern uint32_t devices_number;
28//extern uint32_t onboard_number;
29
30static network_device known_ethernet_cards[] =
31{
32
33// Realtek
34{ PCI_VENDOR_ID_REALTEK, 0x8129, "Realtek 8129 Gigabit Ethernet" },
35{ PCI_VENDOR_ID_REALTEK, 0x8136, "Realtek RTL8101E/RTL8102E PCI-E Fast Ethernet Controller" },
36{ PCI_VENDOR_ID_REALTEK, 0x8139, "Realtek RTL8139/810x Family Fast Ethernet" },
37{ PCI_VENDOR_ID_REALTEK, 0x8167, "Realtek 8169/8110 Gigabit Ethernet" },
38{ PCI_VENDOR_ID_REALTEK, 0x8168, "Realtek RTL8111/8168 PCI-E Gigabit Ethernet" },
39{ PCI_VENDOR_ID_REALTEK, 0x8169, "Realtek 8169/8110 Gigabit Ethernet" },
40
41{ 0x1113, 0x1211, "Realtek RTL8139 Family Fast Ethernet" },
42{ 0x1500, 0x1360, "Realtek RTL8139 Family Fast Ethernet" },
43{ 0x4033, 0x1360, "Realtek RTL8139 Family Fast Ethernet" },
44{ 0x1186, 0x1300, "Realtek RTL8139 Family Fast Ethernet" },
45{ 0x1186, 0x1340, "Realtek RTL8139 Family Fast Ethernet" },
46{ 0x13d1, 0xab06, "Realtek RTL8139 Family Fast Ethernet" },
47{ 0x1259, 0xa117, "Realtek RTL8139 Family Fast Ethernet" },
48{ 0x1259, 0xa11e, "Realtek RTL8139 Family Fast Ethernet" },
49{ 0x14ea, 0xab06, "Realtek RTL8139 Family Fast Ethernet" },
50{ 0x14ea, 0xab07, "Realtek RTL8139 Family Fast Ethernet" },
51{ 0x11db, 0x1234, "Realtek RTL8139 Family Fast Ethernet" },
52{ 0x1432, 0x9130, "Realtek RTL8139 Family Fast Ethernet" },
53{ 0x02ac, 0x1012, "Realtek RTL8139 Family Fast Ethernet" },
54{ 0x018a, 0x0106, "Realtek RTL8139 Family Fast Ethernet" },
55{ 0x126c, 0x1211, "Realtek RTL8139 Family Fast Ethernet" },
56{ 0x1743, 0x8139, "Realtek RTL8139 Family Fast Ethernet" },
57{ 0x021b, 0x8139, "Realtek RTL8139 Family Fast Ethernet" },
58
59// Marvell
60{ PCI_VENDOR_ID_MARVELL, 0x4320, "Marvell 88E8001 Gigabit Ethernet Controller" },
61{ PCI_VENDOR_ID_MARVELL, 0x4340, "Marvell 88E8021 PCI-X IPMI Gigabit Ethernet Controller" },
62{ PCI_VENDOR_ID_MARVELL, 0x4341, "Marvell 88E8022 PCI-X IPMI Gigabit Ethernet Controller" },
63{ PCI_VENDOR_ID_MARVELL, 0x4342, "Marvell 88E8061 PCI-E IPMI Gigabit Ethernet Controller" },
64{ PCI_VENDOR_ID_MARVELL, 0x4343, "Marvell 88E8062 PCI-E IPMI Gigabit Ethernet Controller" },
65{ PCI_VENDOR_ID_MARVELL, 0x4344, "Marvell 88E8021 PCI-X IPMI Gigabit Ethernet Controller" },
66{ PCI_VENDOR_ID_MARVELL, 0x4345, "Marvell 88E8022 PCI-X IPMI Gigabit Ethernet Controller" },
67{ PCI_VENDOR_ID_MARVELL, 0x4346, "Marvell 88E8061 PCI-E IPMI Gigabit Ethernet Controller" },
68{ PCI_VENDOR_ID_MARVELL, 0x4347, "Marvell 88E8062 PCI-E IPMI Gigabit Ethernet Controller" },
69{ PCI_VENDOR_ID_MARVELL, 0x4350, "Marvell 88E8035 PCI-E Fast Ethernet Controller" },
70{ PCI_VENDOR_ID_MARVELL, 0x4351, "Marvell 88E8036 PCI-E Fast Ethernet Controller" },
71{ PCI_VENDOR_ID_MARVELL, 0x4352, "Marvell 88E8038 PCI-E Fast Ethernet Controller" },
72{ PCI_VENDOR_ID_MARVELL, 0x4353, "Marvell 88E8039 PCI-E Fast Ethernet Controller" },
73{ PCI_VENDOR_ID_MARVELL, 0x4354, "Marvell 88E8040 PCI-E Fast Ethernet Controller" },
74{ PCI_VENDOR_ID_MARVELL, 0x4355, "Marvell 88E8040T PCI-E Fast Ethernet Controller" },
75{ PCI_VENDOR_ID_MARVELL, 0x4356, "Marvell 88EC033 PCI-E Fast Ethernet Controller" },
76{ PCI_VENDOR_ID_MARVELL, 0x4357, "Marvell 88E8042 PCI-E Fast Ethernet Controller" },
77{ PCI_VENDOR_ID_MARVELL, 0x435A, "Marvell 88E8048 PCI-E Fast Ethernet Controller" },
78{ PCI_VENDOR_ID_MARVELL, 0x4360, "Marvell 88E8052 PCI-E ASF Gigabit Ethernet Controller" },
79{ PCI_VENDOR_ID_MARVELL, 0x4361, "Marvell 88E8050 PCI-E ASF Gigabit Ethernet Controller" },
80{ PCI_VENDOR_ID_MARVELL, 0x4362, "Marvell 88E8053 PCI-E Gigabit Ethernet Controller" },
81{ PCI_VENDOR_ID_MARVELL, 0x4363, "Marvell 88E8055 PCI-E Gigabit Ethernet Controller" },
82{ PCI_VENDOR_ID_MARVELL, 0x4364, "Marvell 88E8056 PCI-E Gigabit Ethernet Controller" },
83{ PCI_VENDOR_ID_MARVELL, 0x4365, "Marvell 8E8070 based Ethernet Controller" },
84{ PCI_VENDOR_ID_MARVELL, 0x4366, "Marvell 88EC036 PCI-E Gigabit Ethernet Controller" },
85{ PCI_VENDOR_ID_MARVELL, 0x4367, "Marvell 88EC032 Ethernet Controller" },
86{ PCI_VENDOR_ID_MARVELL, 0x4368, "Marvell 88EC034 Ethernet Controller" },
87{ PCI_VENDOR_ID_MARVELL, 0x4369, "Marvell 88EC042 Ethernet Controller" },
88{ PCI_VENDOR_ID_MARVELL, 0x436A, "Marvell 88E8058 PCI-E Gigabit Ethernet Controller" },
89{ PCI_VENDOR_ID_MARVELL, 0x436B, "Marvell 88E8071 PCI-E Gigabit Ethernet Controller" },
90{ PCI_VENDOR_ID_MARVELL, 0x436C, "Marvell 88E8072 PCI-E Gigabit Ethernet Controller" },
91{ PCI_VENDOR_ID_MARVELL, 0x436D, "Marvell 88E8055 PCI-E Gigabit Ethernet Controller" },
92{ PCI_VENDOR_ID_MARVELL, 0x4370, "Marvell 88E8075 PCI-E Gigabit Ethernet Controller" },
93{ PCI_VENDOR_ID_MARVELL, 0x4380, "Marvell 88E8057 PCI-E Gigabit Ethernet Controller" },
94{ PCI_VENDOR_ID_MARVELL, 0x4381, "Marvell 88E8059 PCI-E Gigabit Ethernet Controller" },
95{ PCI_VENDOR_ID_MARVELL, 0x4382, "Marvell 88E8079 PCI-E Gigabit Ethernet Controller" },
96//{ PCI_VENDOR_ID_MARVELL, 0x5005, "Belkin F5D5005 Gigabit Desktop Network PCI Card" },
97
98// Broadcom
99{ PCI_VENDOR_ID_BROADCOM, 0x1600, "Broadcom BCM5752 Gigabit Ethernet PCI Express" },
100{ PCI_VENDOR_ID_BROADCOM, 0x1655, "Broadcom BCM5717 Gigabit Ethernet PCIe" },
101{ PCI_VENDOR_ID_BROADCOM, 0x1656, "Broadcom BCM5718 Gigabit Ethernet PCIe" },
102{ PCI_VENDOR_ID_BROADCOM, 0x1657, "Broadcom BCM5719 Gigabit Ethernet PCIe" },
103{ PCI_VENDOR_ID_BROADCOM, 0x1659, "Broadcom BCM5721 Gigabit Ethernet PCI Express" },
104{ PCI_VENDOR_ID_BROADCOM, 0x165A, "Broadcom BCM5722 Gigabit Ethernet PCI Express" },
105{ PCI_VENDOR_ID_BROADCOM, 0x166A, "Broadcom BCM5780 Gigabit Ethernet" },
106{ PCI_VENDOR_ID_BROADCOM, 0x1672, "Broadcom BCM5754M Gigabit Ethernet PCI Express" },
107{ PCI_VENDOR_ID_BROADCOM, 0x1673, "Broadcom BCM5755M Gigabit Ethernet PCI Express" },
108{ PCI_VENDOR_ID_BROADCOM, 0x167A, "Broadcom BCM5754 Gigabit Ethernet PCI Express" },
109{ PCI_VENDOR_ID_BROADCOM, 0x167B, "Broadcom BCM5755 Gigabit Ethernet PCI Express" },
110{ PCI_VENDOR_ID_BROADCOM, 0x1684, "Broadcom BCM5764M Gigabit Ethernet PCIe" },
111{ PCI_VENDOR_ID_BROADCOM, 0x1691, "Broadcom BCM57788 Gigabit Ethernet PCIe" },
112{ PCI_VENDOR_ID_BROADCOM, 0x1693, "Broadcom BCM5787M Gigabit Ethernet PCI Express" },
113{ PCI_VENDOR_ID_BROADCOM, 0x169B, "Broadcom BCM5787 Gigabit Ethernet PCI Express" },
114{ PCI_VENDOR_ID_BROADCOM, 0x16B4, "Broadcom BCM57765 Gigabit Ethernet PCIe" },
115{ PCI_VENDOR_ID_BROADCOM, 0x16B5, "Broadcom BCM57785 Gigabit Ethernet PCIe" },
116{ PCI_VENDOR_ID_BROADCOM, 0x1712, "Broadcom BCM5906 Fast Ethernet PCI Express" },
117{ PCI_VENDOR_ID_BROADCOM, 0x1713, "Broadcom BCM5906M Fast Ethernet PCI Express" },
118
119// JMicron
120{ PCI_VENDOR_ID_JMICRON, 0x0250, "JMicron JMC250 PCI Express Gigabit Ethernet Controller" },
121{ PCI_VENDOR_ID_JMICRON, 0x0260, "JMicron JMC260 PCI Express Gigabit Ethernet Controller" },
122
123// Intel
124//{ PCI_VENDOR_ID_INTEL, 0x1000, "Intel 82542 Gigabit Ethernet Controller (Fiber)" },
125{ PCI_VENDOR_ID_INTEL, 0x1029, "Intel 8255x Ethernet" },
126{ PCI_VENDOR_ID_INTEL, 0x1030, "Intel 8255x Ethernet" },
127{ PCI_VENDOR_ID_INTEL, 0x1031, "Intel 8255x Ethernet" },
128{ PCI_VENDOR_ID_INTEL, 0x1032, "Intel 8255x Ethernet" },
129{ PCI_VENDOR_ID_INTEL, 0x1033, "Intel 8255x Ethernet" },
130{ PCI_VENDOR_ID_INTEL, 0x1034, "Intel 8255x Ethernet" },
131{ PCI_VENDOR_ID_INTEL, 0x1038, "Intel 8255x Ethernet" },
132{ PCI_VENDOR_ID_INTEL, 0x1039, "Intel 8255x Ethernet" },
133{ PCI_VENDOR_ID_INTEL, 0x103A, "Intel 8255x Ethernet" },
134{ PCI_VENDOR_ID_INTEL, 0x103B, "Intel 8255x Ethernet" },
135{ PCI_VENDOR_ID_INTEL, 0x103C, "Intel 8255x Ethernet" },
136{ PCI_VENDOR_ID_INTEL, 0x103D, "Intel 8255x Ethernet" },
137{ PCI_VENDOR_ID_INTEL, 0x103E, "Intel 8255x Ethernet" },
138//{ PCI_VENDOR_ID_INTEL, 0x1049, "Intel 82566MM Gigabit Network Connection" },
139//{ PCI_VENDOR_ID_INTEL, 0x104A, "Intel 82566DM Gigabit Network Connection" },
140//{ PCI_VENDOR_ID_INTEL, 0x104B, "Intel 82566DC Gigabit Network Connection" },
141//{ PCI_VENDOR_ID_INTEL, 0x104C, "Intel 82562V 10/100 Network Connection" },
142//{ PCI_VENDOR_ID_INTEL, 0x104D, "Intel 82566MC Gigabit Network Connection" },
143{ PCI_VENDOR_ID_INTEL, 0x1050, "Intel 82562EZ 10/100 Ethernet Controller" },
144{ PCI_VENDOR_ID_INTEL, 0x1051, "Intel 82801EB/ER (ICH5/ICH5R) integrated LAN Controller" },
145{ PCI_VENDOR_ID_INTEL, 0x1052, "Intel PRO/100 VE Network Connection" },
146{ PCI_VENDOR_ID_INTEL, 0x1053, "Intel PRO/100 VE Network Connection" },
147{ PCI_VENDOR_ID_INTEL, 0x1054, "Intel PRO/100 VE Network Connection" },
148{ PCI_VENDOR_ID_INTEL, 0x1055, "Intel PRO/100 VE Network Connection" },
149{ PCI_VENDOR_ID_INTEL, 0x1056, "Intel PRO/100 VE Network Connection" },
150{ PCI_VENDOR_ID_INTEL, 0x1057, "Intel PRO/100 VE Network Connection" },
151{ PCI_VENDOR_ID_INTEL, 0x1059, "Intel 82551QM Ethernet Controller" },
152//{ PCI_VENDOR_ID_INTEL, 0x105b "Intel 82546GB Gigabit Ethernet Controller (Copper)" },
153//{ PCI_VENDOR_ID_INTEL, 0x105E, "Intel 82546GB Gigabit Ethernet Controller" },
154//{ PCI_VENDOR_ID_INTEL, 0x105F, "Intel 82571EB Gigabit Ethernet Controller" },
155{ PCI_VENDOR_ID_INTEL, 0x1060, "Intel 82571EB Gigabit Ethernet Controller" },
156{ PCI_VENDOR_ID_INTEL, 0x1064, "Intel 82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller" },
157{ PCI_VENDOR_ID_INTEL, 0x1065, "Intel 82562ET/EZ/GT/GZ - PRO/100 VE Ethernet Controller" },
158{ PCI_VENDOR_ID_INTEL, 0x1066, "Intel 82562 EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller" },
159{ PCI_VENDOR_ID_INTEL, 0x1067, "Intel 82562 EM/EX/GX - PRO/100 VM Ethernet Controller" },
160{ PCI_VENDOR_ID_INTEL, 0x1068, "Intel 82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller Mobile" },
161{ PCI_VENDOR_ID_INTEL, 0x1069, "Intel 82562EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller Mobile" },
162{ PCI_VENDOR_ID_INTEL, 0x106A, "Intel 82562G - PRO/100 VE (LOM) Ethernet Controller" },
163{ PCI_VENDOR_ID_INTEL, 0x106B, "Intel 82562G - PRO/100 VE Ethernet Controller Mobile" },
164{ PCI_VENDOR_ID_INTEL, 0x1075, "82547GI Gigabit Ethernet Controller" },
165{ PCI_VENDOR_ID_INTEL, 0x1076, "82541GI Gigabit Ethernet Controller" },
166{ PCI_VENDOR_ID_INTEL, 0x1077, "82541GI Gigabit Ethernet Controller" },
167{ PCI_VENDOR_ID_INTEL, 0x1078, "82541ER Gigabit Ethernet Controller" },
168{ PCI_VENDOR_ID_INTEL, 0x1079, "82546GB Gigabit Ethernet Controller" },
169{ PCI_VENDOR_ID_INTEL, 0x107a, "82546GB Gigabit Ethernet Controller" },
170{ PCI_VENDOR_ID_INTEL, 0x107b, "82546GB Gigabit Ethernet Controller" },
171{ PCI_VENDOR_ID_INTEL, 0x107c, "82541PI Gigabit Ethernet Controller" },
172//{ PCI_VENDOR_ID_INTEL, 0x107D, "Intel 82572EI Gigabit Ethernet Controller (Copper)" },
173//{ PCI_VENDOR_ID_INTEL, 0x107E, "Intel 82572EI Gigabit Ethernet Controller (Fiber)" },
174//{ PCI_VENDOR_ID_INTEL, 0x107F, "Intel 82572EI Gigabit Ethernet Controller" },
175//{ PCI_VENDOR_ID_INTEL, 0x108a, "Intel 82546GB Gigabit Ethernet Controller" },
176//{ PCI_VENDOR_ID_INTEL, 0x108B, "Intel 82573V Gigabit Ethernet Controller (Copper)" },
177//{ PCI_VENDOR_ID_INTEL, 0x108C, "Intel 82573E Gigabit Ethernet Controller (Copper)" },
178{ PCI_VENDOR_ID_INTEL, 0x1091, "Intel PRO/100 VM Network Connection" },
179{ PCI_VENDOR_ID_INTEL, 0x1092, "Intel PRO/100 VE Network Connection" },
180{ PCI_VENDOR_ID_INTEL, 0x1093, "Intel PRO/100 VM Network Connection" },
181{ PCI_VENDOR_ID_INTEL, 0x1094, "Intel PRO/100 VE Network Connection" },
182{ PCI_VENDOR_ID_INTEL, 0x1095, "Intel PRO/100 VE Network Connection" },
183//{ PCI_VENDOR_ID_INTEL, 0x1096, "Intel 80003ES2LAN Gigabit Ethernet Controller (Copper)" },
184//{ PCI_VENDOR_ID_INTEL, 0x1098, "Intel 80003ES2LAN Gigabit Ethernet Controller (Serdes)" },
185//{ PCI_VENDOR_ID_INTEL, 0x109A, "Intel 82573L Gigabit Ethernet Controller" },
186//{ PCI_VENDOR_ID_INTEL, 0x10A4, "Intel 82571EB Gigabit Ethernet Controller" },
187//{ PCI_VENDOR_ID_INTEL, 0x10A5, "Intel 82571EB Gigabit Ethernet Controller (Fiber)" },
188//{ PCI_VENDOR_ID_INTEL, 0x10BA, "Intel " },
189//{ PCI_VENDOR_ID_INTEL, 0x10BC, "Intel " },
190//{ PCI_VENDOR_ID_INTEL, 0x10B9, "Intel " },
191//{ PCI_VENDOR_ID_INTEL, 0x10BB, "Intel " },
192//{ PCI_VENDOR_ID_INTEL, 0x10BD, "Intel " },
193//{ PCI_VENDOR_ID_INTEL, 0x10BF, "Intel " },
194//{ PCI_VENDOR_ID_INTEL, 0x10C0, "Intel " },
195//{ PCI_VENDOR_ID_INTEL, 0x10C2, "Intel " },
196//{ PCI_VENDOR_ID_INTEL, 0x10C3, "Intel " },
197//{ PCI_VENDOR_ID_INTEL, 0x10C4, "Intel " },
198//{ PCI_VENDOR_ID_INTEL, 0x10C5, "Intel " },
199//{ PCI_VENDOR_ID_INTEL, 0x10CB, "Intel " },
200//{ PCI_VENDOR_ID_INTEL, 0x10CC, "Intel " },
201//{ PCI_VENDOR_ID_INTEL, 0x10CD, "Intel " },
202{ PCI_VENDOR_ID_INTEL, 0x10CE, "Intel 82567V-2 Gigabit Network Connection" },
203{ PCI_VENDOR_ID_INTEL, 0x10D3, "Intel 82574L Gigabit Network Connection" },
204//{ PCI_VENDOR_ID_INTEL, 0x10D5, "Intel " },
205{ PCI_VENDOR_ID_INTEL, 0x10d6, "Intel 82575GB Gigabit Network Connection" },
206//{ PCI_VENDOR_ID_INTEL, 0x10D9, "Intel " },
207//{ PCI_VENDOR_ID_INTEL, 0x10DA, "Intel " },
208//{ PCI_VENDOR_ID_INTEL, 0x10DE, "Intel " },
209//{ PCI_VENDOR_ID_INTEL, 0x10DF, "Intel " },
210//{ PCI_VENDOR_ID_INTEL, 0x10E5, "Intel " },
211//{ PCI_VENDOR_ID_INTEL, 0x10EA, "Intel " },
212//{ PCI_VENDOR_ID_INTEL, 0x10EB, "Intel " },
213//{ PCI_VENDOR_ID_INTEL, 0x10EF, "Intel " },
214//{ PCI_VENDOR_ID_INTEL, 0x10F5, "Intel " },
215//{ PCI_VENDOR_ID_INTEL, 0x10F6, "Intel " },
216{ PCI_VENDOR_ID_INTEL, 0x10F0, "Intel 82578DC Gigabit Network Connection" },
217{ PCI_VENDOR_ID_INTEL, 0x10FE, "Intel 82552 10/100 Network Connection" },
218{ PCI_VENDOR_ID_INTEL, 0x1209, "Intel 8255xER/82551IT Fast Ethernet Controller" },
219{ PCI_VENDOR_ID_INTEL, 0x1227, "Intel 82865 EtherExpress PRO/100A" },
220{ PCI_VENDOR_ID_INTEL, 0x1228, "Intel 82556 EtherExpress PRO/100 Smart" },
221{ PCI_VENDOR_ID_INTEL, 0x1229, "Intel 82557/8/9/0/1 Ethernet Pro 100" },
222//{ PCI_VENDOR_ID_INTEL, 0x1501, "Intel 82567V-3 Gigabit Network Connection" },
223{ PCI_VENDOR_ID_INTEL, 0x1502, "Intel 82579LM Gigabit Network Connection" },
224{ PCI_VENDOR_ID_INTEL, 0x1503, "Intel 82579V Gigabit Network Controller" },
225//{ PCI_VENDOR_ID_INTEL, 0x150C, "Intel 82583V Gigabit Network Connection" },
226//{ PCI_VENDOR_ID_INTEL, 0x1525, "Intel 82567V-4 Gigabit Network Connection" },
227{ PCI_VENDOR_ID_INTEL, 0x153A, "Intel Ethernet Connection I217-LM" },
228{ PCI_VENDOR_ID_INTEL, 0x153B, "Intel Ethernet Connection I217-V" },
229{ PCI_VENDOR_ID_INTEL, 0x1559, "Intel Ethernet Connection I218-V" },
230{ PCI_VENDOR_ID_INTEL, 0x155A, "Intel Ethernet Connection I218-LM" },
231{ PCI_VENDOR_ID_INTEL, 0x15A0, "Intel Ethernet Connection (2) I218-LM" },
232{ PCI_VENDOR_ID_INTEL, 0x15A1, "Intel Ethernet Connection (2) I218-V" },
233{ PCI_VENDOR_ID_INTEL, 0x15A2, "Intel Ethernet Connection (3) I218-LM" },
234{ PCI_VENDOR_ID_INTEL, 0x15A3, "Intel Ethernet Connection (3) I218-V" },
235{ PCI_VENDOR_ID_INTEL, 0x2449, "Intel 82801BA/BAM/CA/CAM Ethernet Controller" },
236{ PCI_VENDOR_ID_INTEL, 0x2459, "Intel 82801E Ethernet Controller" },
237{ PCI_VENDOR_ID_INTEL, 0x245D, "Intel 82801E Ethernet Controller" },
238{ PCI_VENDOR_ID_INTEL, 0x27DC, "Intel NM10/ICH7 Family LAN Controller" },
239//{ PCI_VENDOR_ID_INTEL, 0x294C, "Intel 82566DC-2 Gigabit Network Connection" },
240
241//Atheros (Qualcomm)
242{ PCI_VENDOR_ID_QUALCOMM, 0x1026, "Atheros AR8121/AR8113/AR8114 Ethernet" },
243{ PCI_VENDOR_ID_QUALCOMM, 0x1062, "Atheros AR8132 Fast Ethernet" },
244{ PCI_VENDOR_ID_QUALCOMM, 0x1063, "Atheros AR8131 Gigabit Ethernet" },
245{ PCI_VENDOR_ID_QUALCOMM, 0x1066, "Atheros AR8121/AR8113/AR8114 Ethernet" },
246{ PCI_VENDOR_ID_QUALCOMM, 0x1067, "Atheros L1c Gigabit Ethernet" },
247{ PCI_VENDOR_ID_QUALCOMM, 0x1073, "Atheros AR8151 v1.0 Gigabit 1000" },
248{ PCI_VENDOR_ID_QUALCOMM, 0x1083, "Atheros GbE LAN chip (10/100/1000 Mbit)" },
249{ PCI_VENDOR_ID_QUALCOMM, 0x1090, "Atheros AR8162 Fast Ethernet" },
250{ PCI_VENDOR_ID_QUALCOMM, 0x1091, "Atheros AR8161 Gigabit Ethernet" },
251{ PCI_VENDOR_ID_QUALCOMM, 0x10a0, "Atheros QCA8172 Fast Ethernet" },
252{ PCI_VENDOR_ID_QUALCOMM, 0x10a1, "Atheros QCA8171 Gigabit Ethernet" },
253{ PCI_VENDOR_ID_QUALCOMM, 0x2048, "Atheros L2 Fast Ethernet" },
254{ PCI_VENDOR_ID_QUALCOMM, 0x2060, "Atheros AR8152 v1.1 Fast 10/100" },
255{ PCI_VENDOR_ID_QUALCOMM, 0x2062, "Atheros AR8152 v2.0 Fast 10/100" },
256
257};
258
259static network_device generic_ethernet_cards[] =
260{
261{ 0x0000, 0x0000, "Generic Ethernet Controller" },
262{ PCI_VENDOR_ID_REALTEK, 0x0000, "Realtek Ethernet Controller" },
263{ PCI_VENDOR_ID_MARVELL, 0x0000, "Marvell Ethernet Controller" },
264{ PCI_VENDOR_ID_QUALCOMM, 0x0000, "Atheros Ethernet Controller" },
265{ PCI_VENDOR_ID_INTEL, 0x0000, "Intel(R) Ethernet Controller" },
266};
267
268static network_device known_wifi_cards[] =
269{
270// Broadcom
271{PCI_VENDOR_ID_BROADCOM, 0x4312, "Broadcom BCM4311 802.11a/b/g"},
272//{PCI_VENDOR_ID_BROADCOM, 0x4313, "Broadcom BCM4311 802.11a" },
273{PCI_VENDOR_ID_BROADCOM, 0x4315, "Broadcom BCM4312 802.11b/g Wireless LAN Controller"},
274//{PCI_VENDOR_ID_BROADCOM, 0x4318, "Broadcom BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller"},
275{PCI_VENDOR_ID_BROADCOM, 0x4319, "Broadcom BCM4318 [AirForce 54g] 802.11a/b/g PCI Express Transceiver"},
276//{PCI_VENDOR_ID_BROADCOM, 0x4320, "Broadcom BCM4306 802.11b/g Wireless LAN Controller"},
277//{PCI_VENDOR_ID_BROADCOM, 0x4321, "Broadcom BCM4321 802.11a Wireless Network Controller"},
278//{PCI_VENDOR_ID_BROADCOM, 0x4322, "Broadcom BCM4322 802.11bgn Wireless Network Controller"},
279//{PCI_VENDOR_ID_BROADCOM, 0x4324, "Broadcom BCM4309 802.11abg Wireless Network Controller"},
280//{PCI_VENDOR_ID_BROADCOM, 0x4325, "Broadcom BCM4306 802.11bg Wireless Network Controller"},
281//{PCI_VENDOR_ID_BROADCOM, 0x4328, "Broadcom BCM4321 802.11a/b/g/n"},
282//{PCI_VENDOR_ID_BROADCOM, 0x4329, "Broadcom BCM4321 802.11b/g/n"},
283//{PCI_VENDOR_ID_BROADCOM, 0x432a, "Broadcom BCM4321 802.11an Wireless Network Controller"},
284{PCI_VENDOR_ID_BROADCOM, 0x432b, "Broadcom BCM4322 802.11a/b/g/n Wireless LAN Controller"},
285{PCI_VENDOR_ID_BROADCOM, 0x432c, "Broadcom BCM4322 802.11b/g/n"},
286//{PCI_VENDOR_ID_BROADCOM, 0x432d, "Broadcom BCM4322 802.11an Wireless Network Controller"},
287{PCI_VENDOR_ID_BROADCOM, 0x4331, "Broadcom BCM4331 802.11a/b/g/n"},
288//{PCI_VENDOR_ID_BROADCOM, 0x4350, "Broadcom BCM43222 Wireless Network Adapter"},
289//{PCI_VENDOR_ID_BROADCOM, 0x4351, "Broadcom BCM43222 802.11abgn Wireless Network Adapter"},
290//{PCI_VENDOR_ID_BROADCOM, 0x4353, "Broadcom BCM43224 802.11a/b/g/n"},
291//{PCI_VENDOR_ID_BROADCOM, 0x4357, "Broadcom BCM43225 802.11b/g/n"},
292//{PCI_VENDOR_ID_BROADCOM, 0x4358, "Broadcom BCM43227 802.11b/g/n"},
293{PCI_VENDOR_ID_BROADCOM, 0x4359, "Broadcom BCM43228 802.11a/b/g/n"},
294//{PCI_VENDOR_ID_BROADCOM, 0x4360, "Broadcom BCM4360 802.11ac Wireless Network Adapter"},
295//{PCI_VENDOR_ID_BROADCOM, 0x4365, "Broadcom BCM43142 802.11b/g/n"},
296//{PCI_VENDOR_ID_BROADCOM, 0x43a0, "Broadcom BCM4360 802.11ac Wireless Network Adapter"},
297//{PCI_VENDOR_ID_BROADCOM, 0x43a1, "Broadcom BCM4360 802.11ac Wireless Network Adapter"},
298//{PCI_VENDOR_ID_BROADCOM, 0x43a2, "Broadcom BCM4360 802.11ac Wireless Network Adapter"},
299//{PCI_VENDOR_ID_BROADCOM, 0x43a9, "Broadcom BCM43217 802.11b/g/n"},
300//{PCI_VENDOR_ID_BROADCOM, 0x43aa, "Broadcom BCM43131 802.11b/g/n"},
301//{PCI_VENDOR_ID_BROADCOM, 0x43b1, "Broadcom BCM4352 802.11ac Wireless Network Adapter"},
302//{PCI_VENDOR_ID_BROADCOM, 0x43ba, "Broadcom BCM43602 802.11ac Wireless LAN SoC"},
303//{PCI_VENDOR_ID_BROADCOM, 0x43bb, "Broadcom BCM43602 802.11ac Wireless LAN SoC"},
304//{PCI_VENDOR_ID_BROADCOM, 0x43bc, "Broadcom BCM43602 802.11ac Wireless LAN SoC"},
305//{PCI_VENDOR_ID_BROADCOM, 0x43d3, "Broadcom BCM43567 802.11ac Wireless Network Adapter"},
306//{PCI_VENDOR_ID_BROADCOM, 0x43d9, "Broadcom BCM43570 802.11ac Wireless Network Adapter"},
307//{PCI_VENDOR_ID_BROADCOM, 0x43df, "Broadcom BCM4354 802.11ac Wireless LAN SoC"},
308//{PCI_VENDOR_ID_BROADCOM, 0x43ec, "Broadcom BCM4356 802.11ac Wireless Network Adapter"},
309//{PCI_VENDOR_ID_BROADCOM, 0xa8d8, "Broadcom BCM43224/5 Wireless Network Adapter"},
310
311// Atheros
312{PCI_VENDOR_ID_ATHEROS, 0x0020, "Atheros AR5513 802.11abg Wireless NIC"},
313{PCI_VENDOR_ID_ATHEROS, 0x0023, "Atheros AR5416 Wireless Network Adapter [AR5008 802.11(a)bgn]"},
314{PCI_VENDOR_ID_ATHEROS, 0x0024, "Atheros AR5418 Wireless Network Adapter [AR5008E 802.11(a)bgn]"},
315{PCI_VENDOR_ID_ATHEROS, 0x0027, "Atheros AR9160 Wireless Network Adapter [AR9001 802.11(a)bgn]"},
316{PCI_VENDOR_ID_ATHEROS, 0x0029, "Atheros AR922X Wireless Network Adapter"},
317{PCI_VENDOR_ID_ATHEROS, 0x002A, "Atheros AR928X Wireless Network Adapter"}, // "pci168c,2a"
318{PCI_VENDOR_ID_ATHEROS, 0x002B, "Atheros AR9285 Wireless Network Adapter"},
319//{PCI_VENDOR_ID_ATHEROS, 0x002c, "Atheros AR2427 802.11bg Wireless Network Adapter (PCI-Express)"},
320//{PCI_VENDOR_ID_ATHEROS, 0x002d, "Atheros AR9227 Wireless Network Adapter"},
321//{PCI_VENDOR_ID_ATHEROS, 0x002e, "Atheros AR9287 Wireless Network Adapter (PCI-Express)"},
322//{PCI_VENDOR_ID_ATHEROS, 0x0030, "Atheros AR93xx Wireless Network Adapter"},
323//{PCI_VENDOR_ID_ATHEROS, 0x0032, "Atheros AR9485 Wireless Network Adapter"},
324//{PCI_VENDOR_ID_ATHEROS, 0x0033, "Atheros AR9580 Wireless Network Adapter"},
325//{PCI_VENDOR_ID_ATHEROS, 0x0034, "Atheros AR9462 Wireless Network Adapter"},
326//{PCI_VENDOR_ID_ATHEROS, 0x0036, "Atheros QCA9565 / AR9565 Wireless Network Adapter"},
327//{PCI_VENDOR_ID_ATHEROS, 0x0037, "Atheros AR9485 Wireless Network Adapter"},
328};
329
330
331int devprop_add_network_template(DevPropDevice *device, uint16_t vendor_id)
332{
333builtin = 0;
334if(device)
335{
336
337if((vendor_id != PCI_VENDOR_ID_ATHEROS ) && ( builtin_set == 0 ))
338{
339builtin_set = 1;
340builtin = 0x01;
341}
342
343if(!devprop_add_value(device, "built-in", (uint8_t *)&builtin, 1))
344{
345return 0;
346}
347
348if(!devprop_add_value(device, "device_type", (uint8_t *)"ethernet", sizeof("ethernet")))
349{
350return 0;
351}
352
353devices_number++;
354return 1;
355}
356else
357{
358return 0;
359}
360}
361
362void setup_eth_builtin(pci_dt_t *eth_dev)
363{
364char *devicepath= get_pci_dev_path(eth_dev);
365char *name_model= NULL;
366
367DevPropDevice *device = (DevPropDevice *)malloc(sizeof(DevPropDevice));
368
369verbose("LAN Controller [%04x:%04x] :: %s\n", eth_dev->vendor_id, eth_dev->device_id, devicepath);
370
371if (!string)
372{
373string = devprop_create_string();
374if (!string)
375{
376return;
377}
378}
379
380device = devprop_add_device(string, devicepath);
381if(device)
382{
383verbose("Setting up lan keys\n");
384name_model = get_ethernet_model(eth_dev->vendor_id, eth_dev->device_id);
385
386devprop_add_network_template(device, eth_dev->vendor_id);
387devprop_add_value(device, "model", (uint8_t *)name_model, (strlen(name_model) + 1));
388devprop_add_value(device, "device_type", (uint8_t *)"ethernet", sizeof("ethernet"));
389
390stringdata = (uint8_t*)malloc(sizeof(uint8_t) * string->length);
391if(stringdata)
392{
393memcpy(stringdata, (uint8_t *)devprop_generate_string(string), string->length);
394stringlength = string->length;
395}
396}
397}
398
399void setup_wifi_airport(pci_dt_t *wlan_dev) // ARPT
400{
401char tmp[16];
402builtin = 0;
403DevPropDevice *device ;
404char *devicepath = get_pci_dev_path(wlan_dev);
405
406verbose("Wifi Controller [%04x:%04x]\n", wlan_dev->vendor_id, wlan_dev->device_id);
407
408if (!string)
409{
410string = devprop_create_string();
411if (!string)
412{
413return;
414}
415}
416
417device = devprop_add_device(string, devicepath);
418if(device)
419{
420snprintf(tmp, sizeof(tmp),"Airport");
421devprop_add_value(device, "AAPL,slot-name", (uint8_t *) tmp, strlen(tmp) + 1);
422devprop_add_value(device, "device_type", (uint8_t *) tmp, strlen(tmp) + 1);
423devprop_add_value(device, "built-in", (uint8_t *)&builtin, 1);
424
425unsigned int i = 0;
426for( ; i < sizeof(known_wifi_cards) / sizeof(known_wifi_cards[0]); i++)
427{
428if(wlan_dev->vendor_id == known_wifi_cards[i].vendor_id && wlan_dev->device_id == known_wifi_cards[i].device_id)
429{
430verbose("Setting up wifi keys\n");
431
432devprop_add_value(device, "model", (uint8_t *)known_wifi_cards[i].model, (strlen(known_wifi_cards[i].model) + 1));
433// NOTE: I would set the subsystem id and subsystem vendor id here,
434// however, those values seem to be ovverriden in the boot process.
435// A better method would be injecting the DTGP dsdt method
436// and then injecting the subsystem id there.
437
438stringdata = (uint8_t *)malloc(sizeof(uint8_t) *string->length);
439if(stringdata)
440{
441memcpy(stringdata, (uint8_t *)devprop_generate_string(string), string->length);
442stringlength = string->length;
443}
444return;
445}
446}
447}
448}
449
450char *get_ethernet_model(uint32_t vendor_id, uint32_t device_id)
451{
452int i = 0;
453for( ; i < sizeof(known_ethernet_cards) / sizeof(known_ethernet_cards[0]); i++)
454{
455if(vendor_id == known_ethernet_cards[i].vendor_id && device_id == known_ethernet_cards[i].device_id)
456{
457return known_ethernet_cards[i].model;
458}
459}
460i = 0;
461for ( ; i < sizeof(generic_ethernet_cards) / sizeof(generic_ethernet_cards[0]); i++)
462{
463if (vendor_id == generic_ethernet_cards[i].vendor_id)
464{
465return generic_ethernet_cards[i].model;
466}
467}
468return generic_ethernet_cards[0].model;
469}
470

Archive Download this file

Revision: 2684