pci.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889
  1. /*
  2. * QEMU PCI bus manager
  3. *
  4. * Copyright (c) 2004 Fabrice Bellard
  5. *
  6. * Permission is hereby granted, free of charge, to any person obtaining a copy
  7. * of this software and associated documentation files (the "Software"), to deal
  8. * in the Software without restriction, including without limitation the rights
  9. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10. * copies of the Software, and to permit persons to whom the Software is
  11. * furnished to do so, subject to the following conditions:
  12. *
  13. * The above copyright notice and this permission notice shall be included in
  14. * all copies or substantial portions of the Software.
  15. *
  16. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  19. * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  22. * THE SOFTWARE.
  23. */
  24. #include "hw.h"
  25. #include "pci.h"
  26. #include "console.h"
  27. #include "net.h"
  28. #include "virtio-net.h"
  29. #include "sysemu.h"
  30. //#define DEBUG_PCI
  31. struct PCIBus {
  32. int bus_num;
  33. int devfn_min;
  34. pci_set_irq_fn set_irq;
  35. pci_map_irq_fn map_irq;
  36. uint32_t config_reg; /* XXX: suppress */
  37. /* low level pic */
  38. SetIRQFunc *low_set_irq;
  39. qemu_irq *irq_opaque;
  40. PCIDevice *devices[256];
  41. PCIDevice *parent_dev;
  42. PCIBus *next;
  43. /* The bus IRQ state is the logical OR of the connected devices.
  44. Keep a count of the number of devices with raised IRQs. */
  45. int nirq;
  46. int irq_count[];
  47. };
  48. static void pci_update_mappings(PCIDevice *d);
  49. static void pci_set_irq(void *opaque, int irq_num, int level);
  50. target_phys_addr_t pci_mem_base;
  51. static uint16_t pci_default_sub_vendor_id = PCI_SUBVENDOR_ID_REDHAT_QUMRANET;
  52. static uint16_t pci_default_sub_device_id = PCI_SUBDEVICE_ID_QEMU;
  53. static int pci_irq_index;
  54. static PCIBus *first_bus;
  55. static void pcibus_save(QEMUFile *f, void *opaque)
  56. {
  57. PCIBus *bus = (PCIBus *)opaque;
  58. int i;
  59. qemu_put_be32(f, bus->nirq);
  60. for (i = 0; i < bus->nirq; i++)
  61. qemu_put_be32(f, bus->irq_count[i]);
  62. }
  63. static int pcibus_load(QEMUFile *f, void *opaque, int version_id)
  64. {
  65. PCIBus *bus = (PCIBus *)opaque;
  66. int i, nirq;
  67. if (version_id != 1)
  68. return -EINVAL;
  69. nirq = qemu_get_be32(f);
  70. if (bus->nirq != nirq) {
  71. fprintf(stderr, "pcibus_load: nirq mismatch: src=%d dst=%d\n",
  72. nirq, bus->nirq);
  73. return -EINVAL;
  74. }
  75. for (i = 0; i < nirq; i++)
  76. bus->irq_count[i] = qemu_get_be32(f);
  77. return 0;
  78. }
  79. PCIBus *pci_register_bus(pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
  80. qemu_irq *pic, int devfn_min, int nirq)
  81. {
  82. PCIBus *bus;
  83. static int nbus = 0;
  84. bus = qemu_mallocz(sizeof(PCIBus) + (nirq * sizeof(int)));
  85. bus->set_irq = set_irq;
  86. bus->map_irq = map_irq;
  87. bus->irq_opaque = pic;
  88. bus->devfn_min = devfn_min;
  89. bus->nirq = nirq;
  90. first_bus = bus;
  91. register_savevm("PCIBUS", nbus++, 1, pcibus_save, pcibus_load, bus);
  92. return bus;
  93. }
  94. static PCIBus *pci_register_secondary_bus(PCIDevice *dev, pci_map_irq_fn map_irq)
  95. {
  96. PCIBus *bus;
  97. bus = qemu_mallocz(sizeof(PCIBus));
  98. bus->map_irq = map_irq;
  99. bus->parent_dev = dev;
  100. bus->next = dev->bus->next;
  101. dev->bus->next = bus;
  102. return bus;
  103. }
  104. int pci_bus_num(PCIBus *s)
  105. {
  106. return s->bus_num;
  107. }
  108. void pci_device_save(PCIDevice *s, QEMUFile *f)
  109. {
  110. int i;
  111. qemu_put_be32(f, 2); /* PCI device version */
  112. qemu_put_buffer(f, s->config, 256);
  113. for (i = 0; i < 4; i++)
  114. qemu_put_be32(f, s->irq_state[i]);
  115. }
  116. int pci_device_load(PCIDevice *s, QEMUFile *f)
  117. {
  118. uint32_t version_id;
  119. int i;
  120. version_id = qemu_get_be32(f);
  121. if (version_id > 2)
  122. return -EINVAL;
  123. qemu_get_buffer(f, s->config, 256);
  124. pci_update_mappings(s);
  125. if (version_id >= 2)
  126. for (i = 0; i < 4; i ++)
  127. s->irq_state[i] = qemu_get_be32(f);
  128. return 0;
  129. }
  130. static int pci_set_default_subsystem_id(PCIDevice *pci_dev)
  131. {
  132. uint16_t *id;
  133. id = (void*)(&pci_dev->config[PCI_SUBVENDOR_ID]);
  134. id[0] = cpu_to_le16(pci_default_sub_vendor_id);
  135. id[1] = cpu_to_le16(pci_default_sub_device_id);
  136. return 0;
  137. }
  138. /*
  139. * Parse [[<domain>:]<bus>:]<slot>, return -1 on error
  140. */
  141. static int pci_parse_devaddr(const char *addr, int *domp, int *busp, unsigned *slotp)
  142. {
  143. const char *p;
  144. char *e;
  145. unsigned long val;
  146. unsigned long dom = 0, bus = 0;
  147. unsigned slot = 0;
  148. p = addr;
  149. val = strtoul(p, &e, 16);
  150. if (e == p)
  151. return -1;
  152. if (*e == ':') {
  153. bus = val;
  154. p = e + 1;
  155. val = strtoul(p, &e, 16);
  156. if (e == p)
  157. return -1;
  158. if (*e == ':') {
  159. dom = bus;
  160. bus = val;
  161. p = e + 1;
  162. val = strtoul(p, &e, 16);
  163. if (e == p)
  164. return -1;
  165. }
  166. }
  167. if (dom > 0xffff || bus > 0xff || val > 0x1f)
  168. return -1;
  169. slot = val;
  170. if (*e)
  171. return -1;
  172. /* Note: QEMU doesn't implement domains other than 0 */
  173. if (dom != 0 || pci_find_bus(bus) == NULL)
  174. return -1;
  175. *domp = dom;
  176. *busp = bus;
  177. *slotp = slot;
  178. return 0;
  179. }
  180. int pci_read_devaddr(const char *addr, int *domp, int *busp, unsigned *slotp)
  181. {
  182. char devaddr[32];
  183. if (!get_param_value(devaddr, sizeof(devaddr), "pci_addr", addr))
  184. return -1;
  185. return pci_parse_devaddr(devaddr, domp, busp, slotp);
  186. }
  187. int pci_assign_devaddr(const char *addr, int *domp, int *busp, unsigned *slotp)
  188. {
  189. char devaddr[32];
  190. if (!get_param_value(devaddr, sizeof(devaddr), "pci_addr", addr))
  191. return -1;
  192. if (!strcmp(devaddr, "auto")) {
  193. *domp = *busp = 0;
  194. *slotp = -1;
  195. /* want to support dom/bus auto-assign at some point */
  196. return 0;
  197. }
  198. return pci_parse_devaddr(devaddr, domp, busp, slotp);
  199. }
  200. /* -1 for devfn means auto assign */
  201. PCIDevice *pci_register_device(PCIBus *bus, const char *name,
  202. int instance_size, int devfn,
  203. PCIConfigReadFunc *config_read,
  204. PCIConfigWriteFunc *config_write)
  205. {
  206. PCIDevice *pci_dev;
  207. if (pci_irq_index >= PCI_DEVICES_MAX)
  208. return NULL;
  209. if (devfn < 0) {
  210. for(devfn = bus->devfn_min ; devfn < 256; devfn += 8) {
  211. if (!bus->devices[devfn])
  212. goto found;
  213. }
  214. return NULL;
  215. found: ;
  216. }
  217. pci_dev = qemu_mallocz(instance_size);
  218. pci_dev->bus = bus;
  219. pci_dev->devfn = devfn;
  220. pstrcpy(pci_dev->name, sizeof(pci_dev->name), name);
  221. memset(pci_dev->irq_state, 0, sizeof(pci_dev->irq_state));
  222. pci_set_default_subsystem_id(pci_dev);
  223. if (!config_read)
  224. config_read = pci_default_read_config;
  225. if (!config_write)
  226. config_write = pci_default_write_config;
  227. pci_dev->config_read = config_read;
  228. pci_dev->config_write = config_write;
  229. pci_dev->irq_index = pci_irq_index++;
  230. bus->devices[devfn] = pci_dev;
  231. pci_dev->irq = qemu_allocate_irqs(pci_set_irq, pci_dev, 4);
  232. return pci_dev;
  233. }
  234. static target_phys_addr_t pci_to_cpu_addr(target_phys_addr_t addr)
  235. {
  236. return addr + pci_mem_base;
  237. }
  238. static void pci_unregister_io_regions(PCIDevice *pci_dev)
  239. {
  240. PCIIORegion *r;
  241. int i;
  242. for(i = 0; i < PCI_NUM_REGIONS; i++) {
  243. r = &pci_dev->io_regions[i];
  244. if (!r->size || r->addr == -1)
  245. continue;
  246. if (r->type == PCI_ADDRESS_SPACE_IO) {
  247. isa_unassign_ioport(r->addr, r->size);
  248. } else {
  249. cpu_register_physical_memory(pci_to_cpu_addr(r->addr),
  250. r->size,
  251. IO_MEM_UNASSIGNED);
  252. }
  253. }
  254. }
  255. int pci_unregister_device(PCIDevice *pci_dev)
  256. {
  257. int ret = 0;
  258. if (pci_dev->unregister)
  259. ret = pci_dev->unregister(pci_dev);
  260. if (ret)
  261. return ret;
  262. pci_unregister_io_regions(pci_dev);
  263. qemu_free_irqs(pci_dev->irq);
  264. pci_irq_index--;
  265. pci_dev->bus->devices[pci_dev->devfn] = NULL;
  266. qemu_free(pci_dev);
  267. return 0;
  268. }
  269. void pci_register_io_region(PCIDevice *pci_dev, int region_num,
  270. uint32_t size, int type,
  271. PCIMapIORegionFunc *map_func)
  272. {
  273. PCIIORegion *r;
  274. uint32_t addr;
  275. if ((unsigned int)region_num >= PCI_NUM_REGIONS)
  276. return;
  277. if (size & (size-1)) {
  278. fprintf(stderr, "ERROR: PCI region size must be pow2 "
  279. "type=0x%x, size=0x%x\n", type, size);
  280. exit(1);
  281. }
  282. r = &pci_dev->io_regions[region_num];
  283. r->addr = -1;
  284. r->size = size;
  285. r->type = type;
  286. r->map_func = map_func;
  287. if (region_num == PCI_ROM_SLOT) {
  288. addr = 0x30;
  289. } else {
  290. addr = 0x10 + region_num * 4;
  291. }
  292. *(uint32_t *)(pci_dev->config + addr) = cpu_to_le32(type);
  293. }
  294. static void pci_update_mappings(PCIDevice *d)
  295. {
  296. PCIIORegion *r;
  297. int cmd, i;
  298. uint32_t last_addr, new_addr, config_ofs;
  299. cmd = le16_to_cpu(*(uint16_t *)(d->config + PCI_COMMAND));
  300. for(i = 0; i < PCI_NUM_REGIONS; i++) {
  301. r = &d->io_regions[i];
  302. if (i == PCI_ROM_SLOT) {
  303. config_ofs = 0x30;
  304. } else {
  305. config_ofs = 0x10 + i * 4;
  306. }
  307. if (r->size != 0) {
  308. if (r->type & PCI_ADDRESS_SPACE_IO) {
  309. if (cmd & PCI_COMMAND_IO) {
  310. new_addr = le32_to_cpu(*(uint32_t *)(d->config +
  311. config_ofs));
  312. new_addr = new_addr & ~(r->size - 1);
  313. last_addr = new_addr + r->size - 1;
  314. /* NOTE: we have only 64K ioports on PC */
  315. if (last_addr <= new_addr || new_addr == 0 ||
  316. last_addr >= 0x10000) {
  317. new_addr = -1;
  318. }
  319. } else {
  320. new_addr = -1;
  321. }
  322. } else {
  323. if (cmd & PCI_COMMAND_MEMORY) {
  324. new_addr = le32_to_cpu(*(uint32_t *)(d->config +
  325. config_ofs));
  326. /* the ROM slot has a specific enable bit */
  327. if (i == PCI_ROM_SLOT && !(new_addr & 1))
  328. goto no_mem_map;
  329. new_addr = new_addr & ~(r->size - 1);
  330. last_addr = new_addr + r->size - 1;
  331. /* NOTE: we do not support wrapping */
  332. /* XXX: as we cannot support really dynamic
  333. mappings, we handle specific values as invalid
  334. mappings. */
  335. if (last_addr <= new_addr || new_addr == 0 ||
  336. last_addr == -1) {
  337. new_addr = -1;
  338. }
  339. } else {
  340. no_mem_map:
  341. new_addr = -1;
  342. }
  343. }
  344. /* now do the real mapping */
  345. if (new_addr != r->addr) {
  346. if (r->addr != -1) {
  347. if (r->type & PCI_ADDRESS_SPACE_IO) {
  348. int class;
  349. /* NOTE: specific hack for IDE in PC case:
  350. only one byte must be mapped. */
  351. class = d->config[0x0a] | (d->config[0x0b] << 8);
  352. if (class == 0x0101 && r->size == 4) {
  353. isa_unassign_ioport(r->addr + 2, 1);
  354. } else {
  355. isa_unassign_ioport(r->addr, r->size);
  356. }
  357. } else {
  358. cpu_register_physical_memory(pci_to_cpu_addr(r->addr),
  359. r->size,
  360. IO_MEM_UNASSIGNED);
  361. qemu_unregister_coalesced_mmio(r->addr, r->size);
  362. }
  363. }
  364. r->addr = new_addr;
  365. if (r->addr != -1) {
  366. r->map_func(d, i, r->addr, r->size, r->type);
  367. }
  368. }
  369. }
  370. }
  371. }
  372. uint32_t pci_default_read_config(PCIDevice *d,
  373. uint32_t address, int len)
  374. {
  375. uint32_t val;
  376. switch(len) {
  377. default:
  378. case 4:
  379. if (address <= 0xfc) {
  380. val = le32_to_cpu(*(uint32_t *)(d->config + address));
  381. break;
  382. }
  383. /* fall through */
  384. case 2:
  385. if (address <= 0xfe) {
  386. val = le16_to_cpu(*(uint16_t *)(d->config + address));
  387. break;
  388. }
  389. /* fall through */
  390. case 1:
  391. val = d->config[address];
  392. break;
  393. }
  394. return val;
  395. }
  396. void pci_default_write_config(PCIDevice *d,
  397. uint32_t address, uint32_t val, int len)
  398. {
  399. int can_write, i;
  400. uint32_t end, addr;
  401. if (len == 4 && ((address >= 0x10 && address < 0x10 + 4 * 6) ||
  402. (address >= 0x30 && address < 0x34))) {
  403. PCIIORegion *r;
  404. int reg;
  405. if ( address >= 0x30 ) {
  406. reg = PCI_ROM_SLOT;
  407. }else{
  408. reg = (address - 0x10) >> 2;
  409. }
  410. r = &d->io_regions[reg];
  411. if (r->size == 0)
  412. goto default_config;
  413. /* compute the stored value */
  414. if (reg == PCI_ROM_SLOT) {
  415. /* keep ROM enable bit */
  416. val &= (~(r->size - 1)) | 1;
  417. } else {
  418. val &= ~(r->size - 1);
  419. val |= r->type;
  420. }
  421. *(uint32_t *)(d->config + address) = cpu_to_le32(val);
  422. pci_update_mappings(d);
  423. return;
  424. }
  425. default_config:
  426. /* not efficient, but simple */
  427. addr = address;
  428. for(i = 0; i < len; i++) {
  429. /* default read/write accesses */
  430. switch(d->config[0x0e]) {
  431. case 0x00:
  432. case 0x80:
  433. switch(addr) {
  434. case 0x00:
  435. case 0x01:
  436. case 0x02:
  437. case 0x03:
  438. case 0x06:
  439. case 0x07:
  440. case 0x08:
  441. case 0x09:
  442. case 0x0a:
  443. case 0x0b:
  444. case 0x0e:
  445. case 0x10 ... 0x27: /* base */
  446. case 0x2c ... 0x2f: /* read-only subsystem ID & vendor ID */
  447. case 0x30 ... 0x33: /* rom */
  448. case 0x3d:
  449. can_write = 0;
  450. break;
  451. default:
  452. can_write = 1;
  453. break;
  454. }
  455. break;
  456. default:
  457. case 0x01:
  458. switch(addr) {
  459. case 0x00:
  460. case 0x01:
  461. case 0x02:
  462. case 0x03:
  463. case 0x06:
  464. case 0x07:
  465. case 0x08:
  466. case 0x09:
  467. case 0x0a:
  468. case 0x0b:
  469. case 0x0e:
  470. case 0x2c ... 0x2f: /* read-only subsystem ID & vendor ID */
  471. case 0x38 ... 0x3b: /* rom */
  472. case 0x3d:
  473. can_write = 0;
  474. break;
  475. default:
  476. can_write = 1;
  477. break;
  478. }
  479. break;
  480. }
  481. if (can_write) {
  482. /* Mask out writes to reserved bits in registers */
  483. switch (addr) {
  484. case 0x05:
  485. val &= ~PCI_COMMAND_RESERVED_MASK_HI;
  486. break;
  487. case 0x06:
  488. val &= ~PCI_STATUS_RESERVED_MASK_LO;
  489. break;
  490. case 0x07:
  491. val &= ~PCI_STATUS_RESERVED_MASK_HI;
  492. break;
  493. }
  494. d->config[addr] = val;
  495. }
  496. if (++addr > 0xff)
  497. break;
  498. val >>= 8;
  499. }
  500. end = address + len;
  501. if (end > PCI_COMMAND && address < (PCI_COMMAND + 2)) {
  502. /* if the command register is modified, we must modify the mappings */
  503. pci_update_mappings(d);
  504. }
  505. }
  506. void pci_data_write(void *opaque, uint32_t addr, uint32_t val, int len)
  507. {
  508. PCIBus *s = opaque;
  509. PCIDevice *pci_dev;
  510. int config_addr, bus_num;
  511. #if defined(DEBUG_PCI) && 0
  512. printf("pci_data_write: addr=%08x val=%08x len=%d\n",
  513. addr, val, len);
  514. #endif
  515. bus_num = (addr >> 16) & 0xff;
  516. while (s && s->bus_num != bus_num)
  517. s = s->next;
  518. if (!s)
  519. return;
  520. pci_dev = s->devices[(addr >> 8) & 0xff];
  521. if (!pci_dev)
  522. return;
  523. config_addr = addr & 0xff;
  524. #if defined(DEBUG_PCI)
  525. printf("pci_config_write: %s: addr=%02x val=%08x len=%d\n",
  526. pci_dev->name, config_addr, val, len);
  527. #endif
  528. pci_dev->config_write(pci_dev, config_addr, val, len);
  529. }
  530. uint32_t pci_data_read(void *opaque, uint32_t addr, int len)
  531. {
  532. PCIBus *s = opaque;
  533. PCIDevice *pci_dev;
  534. int config_addr, bus_num;
  535. uint32_t val;
  536. bus_num = (addr >> 16) & 0xff;
  537. while (s && s->bus_num != bus_num)
  538. s= s->next;
  539. if (!s)
  540. goto fail;
  541. pci_dev = s->devices[(addr >> 8) & 0xff];
  542. if (!pci_dev) {
  543. fail:
  544. switch(len) {
  545. case 1:
  546. val = 0xff;
  547. break;
  548. case 2:
  549. val = 0xffff;
  550. break;
  551. default:
  552. case 4:
  553. val = 0xffffffff;
  554. break;
  555. }
  556. goto the_end;
  557. }
  558. config_addr = addr & 0xff;
  559. val = pci_dev->config_read(pci_dev, config_addr, len);
  560. #if defined(DEBUG_PCI)
  561. printf("pci_config_read: %s: addr=%02x val=%08x len=%d\n",
  562. pci_dev->name, config_addr, val, len);
  563. #endif
  564. the_end:
  565. #if defined(DEBUG_PCI) && 0
  566. printf("pci_data_read: addr=%08x val=%08x len=%d\n",
  567. addr, val, len);
  568. #endif
  569. return val;
  570. }
  571. /***********************************************************/
  572. /* generic PCI irq support */
  573. /* 0 <= irq_num <= 3. level must be 0 or 1 */
  574. static void pci_set_irq(void *opaque, int irq_num, int level)
  575. {
  576. PCIDevice *pci_dev = (PCIDevice *)opaque;
  577. PCIBus *bus;
  578. int change;
  579. change = level - pci_dev->irq_state[irq_num];
  580. if (!change)
  581. return;
  582. pci_dev->irq_state[irq_num] = level;
  583. for (;;) {
  584. bus = pci_dev->bus;
  585. irq_num = bus->map_irq(pci_dev, irq_num);
  586. if (bus->set_irq)
  587. break;
  588. pci_dev = bus->parent_dev;
  589. }
  590. bus->irq_count[irq_num] += change;
  591. bus->set_irq(bus->irq_opaque, irq_num, bus->irq_count[irq_num] != 0);
  592. }
  593. /***********************************************************/
  594. /* monitor info on PCI */
  595. typedef struct {
  596. uint16_t class;
  597. const char *desc;
  598. } pci_class_desc;
  599. static const pci_class_desc pci_class_descriptions[] =
  600. {
  601. { 0x0100, "SCSI controller"},
  602. { 0x0101, "IDE controller"},
  603. { 0x0102, "Floppy controller"},
  604. { 0x0103, "IPI controller"},
  605. { 0x0104, "RAID controller"},
  606. { 0x0106, "SATA controller"},
  607. { 0x0107, "SAS controller"},
  608. { 0x0180, "Storage controller"},
  609. { 0x0200, "Ethernet controller"},
  610. { 0x0201, "Token Ring controller"},
  611. { 0x0202, "FDDI controller"},
  612. { 0x0203, "ATM controller"},
  613. { 0x0280, "Network controller"},
  614. { 0x0300, "VGA controller"},
  615. { 0x0301, "XGA controller"},
  616. { 0x0302, "3D controller"},
  617. { 0x0380, "Display controller"},
  618. { 0x0400, "Video controller"},
  619. { 0x0401, "Audio controller"},
  620. { 0x0402, "Phone"},
  621. { 0x0480, "Multimedia controller"},
  622. { 0x0500, "RAM controller"},
  623. { 0x0501, "Flash controller"},
  624. { 0x0580, "Memory controller"},
  625. { 0x0600, "Host bridge"},
  626. { 0x0601, "ISA bridge"},
  627. { 0x0602, "EISA bridge"},
  628. { 0x0603, "MC bridge"},
  629. { 0x0604, "PCI bridge"},
  630. { 0x0605, "PCMCIA bridge"},
  631. { 0x0606, "NUBUS bridge"},
  632. { 0x0607, "CARDBUS bridge"},
  633. { 0x0608, "RACEWAY bridge"},
  634. { 0x0680, "Bridge"},
  635. { 0x0c03, "USB controller"},
  636. { 0, NULL}
  637. };
  638. static void pci_info_device(PCIDevice *d)
  639. {
  640. int i, class;
  641. PCIIORegion *r;
  642. const pci_class_desc *desc;
  643. term_printf(" Bus %2d, device %3d, function %d:\n",
  644. d->bus->bus_num, d->devfn >> 3, d->devfn & 7);
  645. class = le16_to_cpu(*((uint16_t *)(d->config + PCI_CLASS_DEVICE)));
  646. term_printf(" ");
  647. desc = pci_class_descriptions;
  648. while (desc->desc && class != desc->class)
  649. desc++;
  650. if (desc->desc) {
  651. term_printf("%s", desc->desc);
  652. } else {
  653. term_printf("Class %04x", class);
  654. }
  655. term_printf(": PCI device %04x:%04x\n",
  656. le16_to_cpu(*((uint16_t *)(d->config + PCI_VENDOR_ID))),
  657. le16_to_cpu(*((uint16_t *)(d->config + PCI_DEVICE_ID))));
  658. if (d->config[PCI_INTERRUPT_PIN] != 0) {
  659. term_printf(" IRQ %d.\n", d->config[PCI_INTERRUPT_LINE]);
  660. }
  661. if (class == 0x0604) {
  662. term_printf(" BUS %d.\n", d->config[0x19]);
  663. }
  664. for(i = 0;i < PCI_NUM_REGIONS; i++) {
  665. r = &d->io_regions[i];
  666. if (r->size != 0) {
  667. term_printf(" BAR%d: ", i);
  668. if (r->type & PCI_ADDRESS_SPACE_IO) {
  669. term_printf("I/O at 0x%04x [0x%04x].\n",
  670. r->addr, r->addr + r->size - 1);
  671. } else {
  672. term_printf("32 bit memory at 0x%08x [0x%08x].\n",
  673. r->addr, r->addr + r->size - 1);
  674. }
  675. }
  676. }
  677. if (class == 0x0604 && d->config[0x19] != 0) {
  678. pci_for_each_device(d->config[0x19], pci_info_device);
  679. }
  680. }
  681. void pci_for_each_device(int bus_num, void (*fn)(PCIDevice *d))
  682. {
  683. PCIBus *bus = first_bus;
  684. PCIDevice *d;
  685. int devfn;
  686. while (bus && bus->bus_num != bus_num)
  687. bus = bus->next;
  688. if (bus) {
  689. for(devfn = 0; devfn < 256; devfn++) {
  690. d = bus->devices[devfn];
  691. if (d)
  692. fn(d);
  693. }
  694. }
  695. }
  696. void pci_info(void)
  697. {
  698. pci_for_each_device(0, pci_info_device);
  699. }
  700. static const char * const pci_nic_models[] = {
  701. "ne2k_pci",
  702. "i82551",
  703. "i82557b",
  704. "i82559er",
  705. "rtl8139",
  706. "e1000",
  707. "pcnet",
  708. "virtio",
  709. NULL
  710. };
  711. typedef PCIDevice *(*PCINICInitFn)(PCIBus *, NICInfo *, int);
  712. static PCINICInitFn pci_nic_init_fns[] = {
  713. pci_ne2000_init,
  714. pci_i82551_init,
  715. pci_i82557b_init,
  716. pci_i82559er_init,
  717. pci_rtl8139_init,
  718. pci_e1000_init,
  719. pci_pcnet_init,
  720. virtio_net_init,
  721. NULL
  722. };
  723. /* Initialize a PCI NIC. */
  724. PCIDevice *pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn,
  725. const char *default_model)
  726. {
  727. PCIDevice *pci_dev;
  728. int i;
  729. qemu_check_nic_model_list(nd, pci_nic_models, default_model);
  730. for (i = 0; pci_nic_models[i]; i++)
  731. if (strcmp(nd->model, pci_nic_models[i]) == 0) {
  732. pci_dev = pci_nic_init_fns[i](bus, nd, devfn);
  733. if (pci_dev)
  734. nd->private = pci_dev;
  735. return pci_dev;
  736. }
  737. return NULL;
  738. }
  739. typedef struct {
  740. PCIDevice dev;
  741. PCIBus *bus;
  742. } PCIBridge;
  743. static void pci_bridge_write_config(PCIDevice *d,
  744. uint32_t address, uint32_t val, int len)
  745. {
  746. PCIBridge *s = (PCIBridge *)d;
  747. if (address == 0x19 || (address == 0x18 && len > 1)) {
  748. if (address == 0x19)
  749. s->bus->bus_num = val & 0xff;
  750. else
  751. s->bus->bus_num = (val >> 8) & 0xff;
  752. #if defined(DEBUG_PCI)
  753. printf ("pci-bridge: %s: Assigned bus %d\n", d->name, s->bus->bus_num);
  754. #endif
  755. }
  756. pci_default_write_config(d, address, val, len);
  757. }
  758. PCIBus *pci_find_bus(int bus_num)
  759. {
  760. PCIBus *bus = first_bus;
  761. while (bus && bus->bus_num != bus_num)
  762. bus = bus->next;
  763. return bus;
  764. }
  765. PCIDevice *pci_find_device(int bus_num, int slot, int function)
  766. {
  767. PCIBus *bus = pci_find_bus(bus_num);
  768. if (!bus)
  769. return NULL;
  770. return bus->devices[PCI_DEVFN(slot, function)];
  771. }
  772. PCIBus *pci_bridge_init(PCIBus *bus, int devfn, uint16_t vid, uint16_t did,
  773. pci_map_irq_fn map_irq, const char *name)
  774. {
  775. PCIBridge *s;
  776. s = (PCIBridge *)pci_register_device(bus, name, sizeof(PCIBridge),
  777. devfn, NULL, pci_bridge_write_config);
  778. pci_config_set_vendor_id(s->dev.config, vid);
  779. pci_config_set_device_id(s->dev.config, did);
  780. s->dev.config[0x04] = 0x06; // command = bus master, pci mem
  781. s->dev.config[0x05] = 0x00;
  782. s->dev.config[0x06] = 0xa0; // status = fast back-to-back, 66MHz, no error
  783. s->dev.config[0x07] = 0x00; // status = fast devsel
  784. s->dev.config[0x08] = 0x00; // revision
  785. s->dev.config[0x09] = 0x00; // programming i/f
  786. pci_config_set_class(s->dev.config, PCI_CLASS_BRIDGE_PCI);
  787. s->dev.config[0x0D] = 0x10; // latency_timer
  788. s->dev.config[0x0E] = 0x81; // header_type
  789. s->dev.config[0x1E] = 0xa0; // secondary status
  790. s->bus = pci_register_secondary_bus(&s->dev, map_irq);
  791. return s->bus;
  792. }