Changeset 13cc89e1 in rtems
- Timestamp:
- 02/04/99 23:45:55 (25 years ago)
- Branches:
- 4.10, 4.11, 4.8, 4.9, 5, master
- Children:
- 26e663d
- Parents:
- 7397638
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/lib/libbsp/powerpc/dmv177/sonic/sonic.c
r7397638 r13cc89e1 1 void break_when_you_get_here();2 1 /* 3 2 ******************************************************************* … … 34 33 #include "sonic.h" 35 34 #include <rtems/rtems_bsdnet.h> 35 36 /***** CONFIGURATION ****/ 37 typedef void (*sonic_write_register_t)( 38 void *base, 39 unsigned32 regno, 40 unsigned32 value 41 ); 42 43 typedef unsigned32 (*sonic_read_register_t)( 44 void *base, 45 unsigned32 regno 46 ); 47 48 typedef struct { 49 unsigned32 base_address; 50 unsigned32 vector; 51 unsigned32 dcr_value; 52 unsigned32 dc2_value; 53 unsigned32 tda_count; 54 unsigned32 rda_count; 55 sonic_write_register_t write_register; 56 sonic_read_register_t read_register; 57 } sonic_configuration_t; 58 59 /***** CONFIGURATION ****/ 36 60 37 61 #include <stdio.h> … … 105 129 106 130 /* 107 * Default location of device registers108 */109 #ifndef SONIC_BASE_ADDRESS110 # define SONIC_BASE_ADDRESS 0xF3000000111 # warning "Using default SONIC_BASE_ADDRESS."112 #endif113 114 /*115 * Default interrupt vector116 */117 #ifndef SONIC_VECTOR118 # define SONIC_VECTOR 1119 # warning "Using default SONIC_VECTOR."120 #endif121 122 /*123 * Default device configuration register values124 * Conservative, generic values.125 * DCR:126 * No extended bus mode127 * Unlatched bus retry128 * Programmable outputs unused129 * Asynchronous bus mode130 * User definable pins unused131 * No wait states (access time controlled by DTACK*)132 * 32-bit DMA133 * Empty/Fill DMA mode134 * Maximum Transmit/Receive FIFO135 * DC2:136 * Extended programmable outputs unused137 * Normal HOLD request138 * Packet compress output unused139 * No reject on CAM match140 */141 #define SONIC_DCR \142 (DCR_DW32 | DCR_WAIT0 | DCR_PO0 | DCR_PO1 | DCR_RFT24 | DCR_TFT28)143 #ifndef SONIC_DCR144 # define SONIC_DCR (DCR_DW32 | DCR_TFT28)145 #endif146 #ifndef SONIC_DC2147 # define SONIC_DC2 (0)148 #endif149 150 /*151 * Default sizes of transmit and receive descriptor areas152 */153 #define RDA_COUNT 20 /* 20 */154 #define TDA_COUNT 20 /* 10 */155 156 /*157 131 * 158 132 * As suggested by National Application Note 746, make the … … 214 188 215 189 /* 190 * Register access routines 191 */ 192 sonic_write_register_t write_register; 193 sonic_read_register_t read_register; 194 195 /* 216 196 * Interrupt vector 217 197 */ 218 198 rtems_vector_number vector; 199 200 /* 201 * Data Configuration Register values 202 */ 203 rtems_unsigned32 dcr_value; 204 rtems_unsigned32 dc2_value; 219 205 220 206 /* … … 326 312 */ 327 313 328 void sonic_write_register(329 void *base,330 unsigned32 regno,331 unsigned32 value332 );333 334 unsigned32 sonic_read_register(335 void *base,336 unsigned32 regno337 );338 339 314 void sonic_enable_interrupts( 340 void *rp,315 struct sonic_softc *sc, 341 316 unsigned32 mask 342 317 ) 343 318 { 319 void *rp = sc->sonic; 344 320 rtems_interrupt_level level; 345 321 346 322 rtems_interrupt_disable( level ); 347 sonic_write_register(323 (*sc->write_register)( 348 324 rp, 349 325 SONIC_REG_IMR, 350 sonic_read_register(rp, SONIC_REG_IMR) | mask326 (*sc->read_register)(rp, SONIC_REG_IMR) | mask 351 327 ); 352 328 rtems_interrupt_enable( level ); … … 396 372 * Stop the transmitter and receiver. 397 373 */ 398 sonic_write_register( rp, SONIC_REG_CR, CR_HTX | CR_RXDIS );374 (*sc->write_register)( rp, SONIC_REG_CR, CR_HTX | CR_RXDIS ); 399 375 } 400 376 … … 457 433 sc->Interrupts++; 458 434 459 isr = sonic_read_register( rp, SONIC_REG_ISR );460 imr = sonic_read_register( rp, SONIC_REG_IMR );435 isr = (*sc->read_register)( rp, SONIC_REG_ISR ); 436 imr = (*sc->read_register)( rp, SONIC_REG_IMR ); 461 437 462 438 /* … … 480 456 } 481 457 482 sonic_write_register( rp, SONIC_REG_IMR, imr );458 (*sc->write_register)( rp, SONIC_REG_IMR, imr ); 483 459 } 484 460 … … 543 519 void *rp = sc->sonic; 544 520 545 sonic_write_register( rp, SONIC_REG_CTDA, link );546 sonic_write_register( rp, SONIC_REG_CR, CR_TXP );521 (*sc->write_register)( rp, SONIC_REG_CTDA, link ); 522 (*sc->write_register)( rp, SONIC_REG_CR, CR_TXP ); 547 523 } 548 524 } … … 626 602 * Clear old events. 627 603 */ 628 sonic_write_register( rp, SONIC_REG_ISR, ISR_PINT | ISR_TXDN | ISR_TXER );604 (*sc->write_register)( rp, SONIC_REG_ISR, ISR_PINT | ISR_TXDN | ISR_TXER ); 629 605 630 606 /* … … 646 622 * Enable transmitter interrupts. 647 623 */ 648 sonic_enable_interrupts( rp, (IMR_PINTEN | IMR_PTXEN | IMR_TXEREN) );624 sonic_enable_interrupts( sc, (IMR_PINTEN | IMR_PTXEN | IMR_TXEREN) ); 649 625 650 626 /* … … 655 631 RTEMS_NO_TIMEOUT, 656 632 &events); 657 sonic_write_register( rp, SONIC_REG_ISR, ISR_PINT | ISR_TXDN | ISR_TXER );633 (*sc->write_register)( rp, SONIC_REG_ISR, ISR_PINT | ISR_TXDN | ISR_TXER ); 658 634 sonic_retire_tda (sc); 659 635 } … … 743 719 744 720 /* XXX not in KA9Q */ 745 sonic_enable_interrupts( rp, (IMR_PINTEN | IMR_PTXEN | IMR_TXEREN) );746 sonic_write_register( rp, SONIC_REG_CR, CR_TXP );721 sonic_enable_interrupts( sc, (IMR_PINTEN | IMR_PTXEN | IMR_TXEREN) ); 722 (*sc->write_register)( rp, SONIC_REG_CR, CR_TXP ); 747 723 } 748 724 … … 833 809 * This would be more difficult to recover from.... 834 810 */ 835 if ( sonic_read_register( rp, SONIC_REG_ISR ) & ISR_RBAE) {811 if ((*sc->read_register)( rp, SONIC_REG_ISR ) & ISR_RBAE) { 836 812 837 813 #if (SONIC_DEBUG & SONIC_DEBUG_ERRORS) … … 853 829 * Check my interpretation of the SONIC manual. 854 830 */ 855 if ( sonic_read_register( rp, SONIC_REG_CR ) & CR_RXEN)831 if ((*sc->read_register)( rp, SONIC_REG_CR ) & CR_RXEN) 856 832 rtems_panic ("SONIC RBAE/RXEN"); 857 833 … … 873 849 */ 874 850 for (i = 0 ; i < 2 ; i++) { 875 if ( sonic_read_register( rp, SONIC_REG_RRP ) ==876 sonic_read_register( rp, SONIC_REG_RSA ))877 sonic_write_register(851 if ((*sc->read_register)( rp, SONIC_REG_RRP ) == 852 (*sc->read_register)( rp, SONIC_REG_RSA )) 853 (*sc->write_register)( 878 854 rp, 879 855 SONIC_REG_RRP, 880 sonic_read_register( rp, SONIC_REG_REA )856 (*sc->read_register)( rp, SONIC_REG_REA ) 881 857 ); 882 sonic_write_register(858 (*sc->write_register)( 883 859 rp, 884 860 SONIC_REG_RRP, 885 sonic_read_register(rp, SONIC_REG_RRP) - sizeof(ReceiveResource_t)861 (*sc->read_register)(rp, SONIC_REG_RRP) - sizeof(ReceiveResource_t) 886 862 ); 887 863 } … … 890 866 * Restart reception 891 867 */ 892 sonic_write_register( rp, SONIC_REG_ISR, ISR_RBAE );893 sonic_write_register( rp, SONIC_REG_CR, CR_RXEN );868 (*sc->write_register)( rp, SONIC_REG_ISR, ISR_RBAE ); 869 (*sc->write_register)( rp, SONIC_REG_CR, CR_RXEN ); 894 870 } 895 871 … … 897 873 * Clear old packet-received events. 898 874 */ 899 sonic_write_register( rp, SONIC_REG_ISR, ISR_PKTRX );875 (*sc->write_register)( rp, SONIC_REG_ISR, ISR_PKTRX ); 900 876 901 877 /* … … 908 884 * Enable interrupts. 909 885 */ 910 sonic_enable_interrupts( rp, (IMR_PRXEN | IMR_RBAEEN) );886 sonic_enable_interrupts( sc, (IMR_PRXEN | IMR_RBAEEN) ); 911 887 912 888 /* … … 952 928 * Start the receiver 953 929 */ 954 oldMissedTally = sonic_read_register( rp, SONIC_REG_MPT );930 oldMissedTally = (*sc->read_register)( rp, SONIC_REG_MPT ); 955 931 956 932 /* … … 1043 1019 rwp = sc->rsa; 1044 1020 } 1045 sonic_write_register( rp, SONIC_REG_RWP , LSW(rwp) );1021 (*sc->write_register)( rp, SONIC_REG_RWP , LSW(rwp) ); 1046 1022 1047 1023 /* 1048 1024 * Tell the SONIC to reread the RRA. 1049 1025 */ 1050 if ( sonic_read_register( rp, SONIC_REG_ISR ) & ISR_RBE)1051 sonic_write_register( rp, SONIC_REG_ISR, ISR_RBE );1026 if ((*sc->read_register)( rp, SONIC_REG_ISR ) & ISR_RBE) 1027 (*sc->write_register)( rp, SONIC_REG_ISR, ISR_RBE ); 1052 1028 } 1053 1029 else { … … 1063 1039 * Count missed packets 1064 1040 */ 1065 newMissedTally = sonic_read_register( rp, SONIC_REG_MPT );1041 newMissedTally = (*sc->read_register)( rp, SONIC_REG_MPT ); 1066 1042 if (newMissedTally != oldMissedTally) { 1067 1043 sc->rxMissed += (newMissedTally - oldMissedTally) & 0xFFFF; … … 1112 1088 */ 1113 1089 1114 if ( sonic_read_register( rp, SONIC_REG_SR ) < SONIC_REVISION_C ) {1090 if ( (*sc->read_register)( rp, SONIC_REG_SR ) < SONIC_REVISION_C ) { 1115 1091 rtems_fatal_error_occurred( 0x0BADF00D ); /* don't eat this part :) */ 1116 1092 } … … 1253 1229 * Issue a software reset. 1254 1230 */ 1255 sonic_write_register( rp, SONIC_REG_CR, CR_RST | CR_STP | CR_RXDIS | CR_HTX );1231 (*sc->write_register)( rp, SONIC_REG_CR, CR_RST | CR_STP | CR_RXDIS | CR_HTX ); 1256 1232 1257 1233 /* 1258 1234 * Set up data configuration registers. 1259 1235 */ 1260 sonic_write_register( rp, SONIC_REG_DCR, SONIC_DCR);1261 sonic_write_register( rp, SONIC_REG_DCR2, SONIC_DC2);1262 1263 sonic_write_register( rp, SONIC_REG_CR, CR_STP | CR_RXDIS | CR_HTX );1236 (*sc->write_register)( rp, SONIC_REG_DCR, sc->dcr_value ); 1237 (*sc->write_register)( rp, SONIC_REG_DCR2, sc->dc2_value ); 1238 1239 (*sc->write_register)( rp, SONIC_REG_CR, CR_STP | CR_RXDIS | CR_HTX ); 1264 1240 1265 1241 /* 1266 1242 * Mask all interrupts 1267 1243 */ 1268 sonic_write_register( rp, SONIC_REG_IMR, 0x0 ); /* XXX was backwards */1244 (*sc->write_register)( rp, SONIC_REG_IMR, 0x0 ); /* XXX was backwards */ 1269 1245 1270 1246 /* 1271 1247 * Clear outstanding interrupts. 1272 1248 */ 1273 sonic_write_register( rp, SONIC_REG_ISR, 0x7FFF );1249 (*sc->write_register)( rp, SONIC_REG_ISR, 0x7FFF ); 1274 1250 1275 1251 /* … … 1277 1253 */ 1278 1254 1279 sonic_write_register( rp, SONIC_REG_CRCT, 0xFFFF );1280 sonic_write_register( rp, SONIC_REG_FAET, 0xFFFF );1281 sonic_write_register( rp, SONIC_REG_MPT, 0xFFFF );1282 sonic_write_register( rp, SONIC_REG_RSC, 0 );1255 (*sc->write_register)( rp, SONIC_REG_CRCT, 0xFFFF ); 1256 (*sc->write_register)( rp, SONIC_REG_FAET, 0xFFFF ); 1257 (*sc->write_register)( rp, SONIC_REG_MPT, 0xFFFF ); 1258 (*sc->write_register)( rp, SONIC_REG_RSC, 0 ); 1283 1259 1284 1260 /* … … 1289 1265 1290 1266 if (sc->acceptBroadcast) 1291 sonic_write_register( rp, SONIC_REG_RCR, RCR_BRD );1267 (*sc->write_register)( rp, SONIC_REG_RCR, RCR_BRD ); 1292 1268 else 1293 sonic_write_register( rp, SONIC_REG_RCR, 0 );1269 (*sc->write_register)( rp, SONIC_REG_RCR, 0 ); 1294 1270 1295 1271 /* … … 1297 1273 */ 1298 1274 1299 sonic_write_register( rp, SONIC_REG_URRA, MSW(sc->rsa) );1300 sonic_write_register( rp, SONIC_REG_RSA, LSW(sc->rsa) );1301 1302 sonic_write_register( rp, SONIC_REG_REA, LSW(sc->rea) );1303 1304 sonic_write_register( rp, SONIC_REG_RRP, LSW(sc->rsa) );1305 sonic_write_register( rp, SONIC_REG_RWP, LSW(sc->rsa) ); /* XXX was rea */1306 1307 sonic_write_register( rp, SONIC_REG_URDA, MSW(sc->rda) );1308 sonic_write_register( rp, SONIC_REG_CRDA, LSW(sc->rda) );1309 1310 sonic_write_register( rp, SONIC_REG_UTDA, MSW(sc->tdaTail) );1311 sonic_write_register( rp, SONIC_REG_CTDA, LSW(sc->tdaTail) );1275 (*sc->write_register)( rp, SONIC_REG_URRA, MSW(sc->rsa) ); 1276 (*sc->write_register)( rp, SONIC_REG_RSA, LSW(sc->rsa) ); 1277 1278 (*sc->write_register)( rp, SONIC_REG_REA, LSW(sc->rea) ); 1279 1280 (*sc->write_register)( rp, SONIC_REG_RRP, LSW(sc->rsa) ); 1281 (*sc->write_register)( rp, SONIC_REG_RWP, LSW(sc->rsa) ); /* XXX was rea */ 1282 1283 (*sc->write_register)( rp, SONIC_REG_URDA, MSW(sc->rda) ); 1284 (*sc->write_register)( rp, SONIC_REG_CRDA, LSW(sc->rda) ); 1285 1286 (*sc->write_register)( rp, SONIC_REG_UTDA, MSW(sc->tdaTail) ); 1287 (*sc->write_register)( rp, SONIC_REG_CTDA, LSW(sc->tdaTail) ); 1312 1288 1313 1289 /* … … 1316 1292 */ 1317 1293 1318 sonic_write_register( rp, SONIC_REG_EOBC, RBUF_WC - 2 );1294 (*sc->write_register)( rp, SONIC_REG_EOBC, RBUF_WC - 2 ); 1319 1295 1320 1296 /* … … 1322 1298 */ 1323 1299 1324 sonic_write_register( rp, SONIC_REG_CR, CR_RRRA );1325 while ( sonic_read_register( rp, SONIC_REG_CR ) & CR_RRRA)1300 (*sc->write_register)( rp, SONIC_REG_CR, CR_RRRA ); 1301 while ((*sc->read_register)( rp, SONIC_REG_CR ) & CR_RRRA) 1326 1302 continue; 1327 1303 … … 1330 1306 */ 1331 1307 1332 sonic_write_register( rp, SONIC_REG_CR, 0 );1308 (*sc->write_register)( rp, SONIC_REG_CR, 0 ); 1333 1309 1334 1310 /* … … 1350 1326 cdp->ce = 0x0001; /* Enable first entry in CAM */ 1351 1327 1352 sonic_write_register( rp, SONIC_REG_CDC, 1 ); /* 1 entry in CDA */1353 sonic_write_register( rp, SONIC_REG_CDP, LSW(cdp) );1354 sonic_write_register( rp, SONIC_REG_CR, CR_LCAM ); /* Load the CAM */1355 1356 while ( sonic_read_register( rp, SONIC_REG_CR ) & CR_LCAM)1328 (*sc->write_register)( rp, SONIC_REG_CDC, 1 ); /* 1 entry in CDA */ 1329 (*sc->write_register)( rp, SONIC_REG_CDP, LSW(cdp) ); 1330 (*sc->write_register)( rp, SONIC_REG_CR, CR_LCAM ); /* Load the CAM */ 1331 1332 while ((*sc->read_register)( rp, SONIC_REG_CR ) & CR_LCAM) 1357 1333 continue; 1358 1334 … … 1361 1337 */ 1362 1338 1363 sonic_write_register( rp, SONIC_REG_CR, CR_RST | CR_STP | CR_RXDIS | CR_HTX );1339 (*sc->write_register)( rp, SONIC_REG_CR, CR_RST | CR_STP | CR_RXDIS | CR_HTX ); 1364 1340 1365 1341 #if (SONIC_DEBUG & SONIC_DEBUG_CAM) 1366 sonic_write_register( rp, SONIC_REG_CEP, 0 ); /* Select first entry in CAM */1342 (*sc->write_register)( rp, SONIC_REG_CEP, 0 ); /* Select first entry in CAM */ 1367 1343 printf ("Loaded Ethernet address into SONIC CAM.\n" 1368 1344 " Wrote %04x%04x%04x - %#x\n" 1369 1345 " Read %04x%04x%04x - %#x\n", 1370 1346 cdp->cap2, cdp->cap1, cdp->cap0, cdp->ce, 1371 sonic_read_register( rp, SONIC_REG_CAP2 ),1372 sonic_read_register( rp, SONIC_REG_CAP1 ),1373 sonic_read_register( rp, SONIC_REG_CAP0 ),1374 sonic_read_register( rp, SONIC_REG_CE ));1375 #endif 1376 1377 sonic_write_register( rp, SONIC_REG_CEP, 0 ); /* Select first entry in CAM */1378 if (( sonic_read_register( rp, SONIC_REG_CAP2 ) != cdp->cap2)1379 || ( sonic_read_register( rp, SONIC_REG_CAP1 ) != cdp->cap1)1380 || ( sonic_read_register( rp, SONIC_REG_CAP0 ) != cdp->cap0)1381 || ( sonic_read_register( rp, SONIC_REG_CE ) != cdp->ce)) {1347 (*sc->read_register)( rp, SONIC_REG_CAP2 ), 1348 (*sc->read_register)( rp, SONIC_REG_CAP1 ), 1349 (*sc->read_register)( rp, SONIC_REG_CAP0 ), 1350 (*sc->read_register)( rp, SONIC_REG_CE )); 1351 #endif 1352 1353 (*sc->write_register)( rp, SONIC_REG_CEP, 0 ); /* Select first entry in CAM */ 1354 if (((*sc->read_register)( rp, SONIC_REG_CAP2 ) != cdp->cap2) 1355 || ((*sc->read_register)( rp, SONIC_REG_CAP1 ) != cdp->cap1) 1356 || ((*sc->read_register)( rp, SONIC_REG_CAP0 ) != cdp->cap0) 1357 || ((*sc->read_register)( rp, SONIC_REG_CE ) != cdp->ce)) { 1382 1358 printf ("Failed to load Ethernet address into SONIC CAM.\n" 1383 1359 " Wrote %04x%04x%04x - %#x\n" 1384 1360 " Read %04x%04x%04x - %#x\n", 1385 1361 cdp->cap2, cdp->cap1, cdp->cap0, cdp->ce, 1386 sonic_read_register( rp, SONIC_REG_CAP2 ),1387 sonic_read_register( rp, SONIC_REG_CAP1 ),1388 sonic_read_register( rp, SONIC_REG_CAP0 ),1389 sonic_read_register( rp, SONIC_REG_CE ));1362 (*sc->read_register)( rp, SONIC_REG_CAP2 ), 1363 (*sc->read_register)( rp, SONIC_REG_CAP1 ), 1364 (*sc->read_register)( rp, SONIC_REG_CAP0 ), 1365 (*sc->read_register)( rp, SONIC_REG_CE )); 1390 1366 rtems_panic ("SONIC LCAM"); 1391 1367 } 1392 1368 1393 sonic_write_register(rp, SONIC_REG_CR, /* CR_TXP | */CR_RXEN | CR_STP);1369 (*sc->write_register)(rp, SONIC_REG_CR, /* CR_TXP | */CR_RXEN | CR_STP); 1394 1370 1395 1371 /* … … 1397 1373 */ 1398 1374 /* XXX 1399 sonic_write_register( rp, SONIC_REG_IMR, 0 );1375 (*sc->write_register)( rp, SONIC_REG_IMR, 0 ); 1400 1376 */ 1401 1377 old_handler = set_vector(sonic_interrupt_handler, sc->vector, 0); … … 1447 1423 * Set flags appropriately 1448 1424 */ 1449 rcr = sonic_read_register( rp, SONIC_REG_RCR );1425 rcr = (*sc->read_register)( rp, SONIC_REG_RCR ); 1450 1426 if (ifp->if_flags & IFF_PROMISC) 1451 1427 rcr |= RCR_PRO; 1452 1428 else 1453 1429 rcr &= ~RCR_PRO; 1454 sonic_write_register( rp, SONIC_REG_RCR, rcr);1430 (*sc->write_register)( rp, SONIC_REG_RCR, rcr); 1455 1431 1456 1432 /* … … 1462 1438 * Enable receiver and transmitter 1463 1439 */ 1464 /* sonic_write_register( rp, SONIC_REG_IMR, 0 ); */1465 sonic_enable_interrupts( rp,1440 /* (*sc->write_register)( rp, SONIC_REG_IMR, 0 ); */ 1441 sonic_enable_interrupts( sc, 1466 1442 (IMR_PINTEN | IMR_PTXEN | IMR_TXEREN) | (IMR_PRXEN | IMR_RBAEEN) ); 1467 1443 1468 sonic_write_register(rp, SONIC_REG_CR, /* CR_TXP | */ CR_RXEN);1444 (*sc->write_register)(rp, SONIC_REG_CR, /* CR_TXP | */ CR_RXEN); 1469 1445 } 1470 1446 … … 1522 1498 * This is the only `extern' function in the driver. 1523 1499 */ 1500 1524 1501 int 1525 rtems_sonic_driver_attach (struct rtems_bsdnet_ifconfig *config) 1502 rtems_sonic_driver_attach_chip ( 1503 struct rtems_bsdnet_ifconfig *config, 1504 sonic_configuration_t *chip 1505 ) 1526 1506 { 1527 1507 struct sonic_softc *sc; … … 1570 1550 sc->rdaCount = config->rbuf_count; 1571 1551 else 1572 sc->rdaCount = RDA_COUNT;1552 sc->rdaCount = chip->rda_count; 1573 1553 if (config->xbuf_count) 1574 1554 sc->tdaCount = config->xbuf_count; 1575 1555 else 1576 sc->tdaCount = TDA_COUNT;1556 sc->tdaCount = chip->tda_count; 1577 1557 sc->acceptBroadcast = !config->ignore_broadcast; 1578 1558 1579 sc->sonic = (void *) SONIC_BASE_ADDRESS; 1580 sc->vector = SONIC_VECTOR; 1559 sc->sonic = (void *) chip->base_address; 1560 sc->vector = chip->vector; 1561 sc->dcr_value = chip->dcr_value; 1562 sc->dc2_value = chip->dc2_value; 1563 sc->write_register = chip->write_register; 1564 sc->read_register = chip->read_register; 1581 1565 1582 1566 /* … … 1674 1658 #endif 1675 1659 1676 void sonic_write_register(1660 void dmv177_sonic_write_register( 1677 1661 void *base, 1678 1662 unsigned32 regno, … … 1690 1674 } 1691 1675 1692 unsigned32 sonic_read_register(1676 unsigned32 dmv177_sonic_read_register( 1693 1677 void *base, 1694 1678 unsigned32 regno … … 1706 1690 return value; 1707 1691 } 1692 /******** DMV177 SPECIFIC INFORMATION ***********/ 1693 /* 1694 * Default sizes of transmit and receive descriptor areas 1695 */ 1696 #define RDA_COUNT 20 /* 20 */ 1697 #define TDA_COUNT 20 /* 10 */ 1698 1699 /* 1700 * Default device configuration register values 1701 * Conservative, generic values. 1702 * DCR: 1703 * No extended bus mode 1704 * Unlatched bus retry 1705 * Programmable outputs unused 1706 * Asynchronous bus mode 1707 * User definable pins unused 1708 * No wait states (access time controlled by DTACK*) 1709 * 32-bit DMA 1710 * Empty/Fill DMA mode 1711 * Maximum Transmit/Receive FIFO 1712 * DC2: 1713 * Extended programmable outputs unused 1714 * Normal HOLD request 1715 * Packet compress output unused 1716 * No reject on CAM match 1717 */ 1718 #define SONIC_DCR \ 1719 (DCR_DW32 | DCR_WAIT0 | DCR_PO0 | DCR_PO1 | DCR_RFT24 | DCR_TFT28) 1720 #ifndef SONIC_DCR 1721 # define SONIC_DCR (DCR_DW32 | DCR_TFT28) 1722 #endif 1723 #ifndef SONIC_DC2 1724 # define SONIC_DC2 (0) 1725 #endif 1726 1727 /* 1728 * Default location of device registers 1729 */ 1730 #ifndef SONIC_BASE_ADDRESS 1731 # define SONIC_BASE_ADDRESS 0xF3000000 1732 # warning "Using default SONIC_BASE_ADDRESS." 1733 #endif 1734 1735 /* 1736 * Default interrupt vector 1737 */ 1738 #ifndef SONIC_VECTOR 1739 # define SONIC_VECTOR 1 1740 # warning "Using default SONIC_VECTOR." 1741 #endif 1742 1743 sonic_configuration_t dmv177_sonic_configuration = { 1744 SONIC_BASE_ADDRESS, /* base address */ 1745 SONIC_VECTOR, /* vector number */ 1746 SONIC_DCR, /* DCR register value */ 1747 SONIC_DC2, /* DC2 register value */ 1748 TDA_COUNT, /* number of transmit descriptors */ 1749 RDA_COUNT, /* number of receive descriptors */ 1750 dmv177_sonic_write_register, 1751 dmv177_sonic_read_register 1752 }; 1753 1754 int rtems_sonic_driver_attach (struct rtems_bsdnet_ifconfig *config) 1755 { 1756 return rtems_sonic_driver_attach_chip ( config, &dmv177_sonic_configuration ); 1757 1758 } 1759 1760 /******** DMV177 SPECIFIC INFORMATION ***********/ 1761
Note: See TracChangeset
for help on using the changeset viewer.