Changeset 74864ac in mainline for uspace/srv/hw/netif/dp8390/dp8390.c
- Timestamp:
- 2011-01-06T15:28:51Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade
- Children:
- 0777f4c5
- Parents:
- fc23ef6
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hw/netif/dp8390/dp8390.c
rfc23ef6 r74864ac 46 46 #define CR_EXTRA CR_STA 47 47 48 _PROTOTYPE(static void dp_init, (dpeth_t *dep) ); 49 _PROTOTYPE(static void dp_reinit, (dpeth_t *dep) ); 50 _PROTOTYPE(static void dp_reset, (dpeth_t *dep) ); 51 _PROTOTYPE(static void dp_recv, (dpeth_t *dep) ); 52 _PROTOTYPE(static void dp_send, (dpeth_t *dep) ); 53 _PROTOTYPE(static void dp_pio8_getblock, (dpeth_t *dep, int page, 54 size_t offset, size_t size, void *dst) ); 55 _PROTOTYPE(static void dp_pio16_getblock, (dpeth_t *dep, int page, 56 size_t offset, size_t size, void *dst) ); 57 _PROTOTYPE(static int dp_pkt2user, (dpeth_t *dep, int page, 58 int length) ); 59 _PROTOTYPE(static void dp_pio8_user2nic, (dpeth_t *dep, 60 iovec_dat_t *iovp, vir_bytes offset, 61 int nic_addr, vir_bytes count) ); 62 _PROTOTYPE(static void dp_pio16_user2nic, (dpeth_t *dep, 63 iovec_dat_t *iovp, vir_bytes offset, 64 int nic_addr, vir_bytes count) ); 65 _PROTOTYPE(static void dp_pio8_nic2user, (dpeth_t *dep, int nic_addr, 66 iovec_dat_t *iovp, vir_bytes offset, vir_bytes count) ); 67 _PROTOTYPE(static void dp_pio16_nic2user, (dpeth_t *dep, int nic_addr, 68 iovec_dat_t *iovp, vir_bytes offset, vir_bytes count) ); 69 _PROTOTYPE(static void dp_next_iovec, (iovec_dat_t *iovp) ); 70 _PROTOTYPE(static void conf_hw, (dpeth_t *dep) ); 71 _PROTOTYPE(static void reply, (dpeth_t *dep, int err, int may_block) ); 72 _PROTOTYPE(static void get_userdata, (int user_proc, 73 vir_bytes user_addr, vir_bytes count, void *loc_addr) ); 74 _PROTOTYPE(static void insb, (port_t port, void *buf, size_t size) ); 75 _PROTOTYPE(static void insw, (port_t port, void *buf, size_t size) ); 48 static void dp_init(dpeth_t *dep); 49 static void dp_reinit(dpeth_t *dep); 50 static void dp_reset(dpeth_t *dep); 51 static void dp_recv(dpeth_t *dep); 52 static void dp_send(dpeth_t *dep); 53 static void dp_pio8_getblock(dpeth_t *dep, int page, size_t offset, size_t size, void *dst); 54 static void dp_pio16_getblock(dpeth_t *dep, int page, size_t offset, size_t size, void *dst); 55 static int dp_pkt2user(dpeth_t *dep, int page, int length); 56 static void dp_pio8_user2nic(dpeth_t *dep, iovec_dat_t *iovp, vir_bytes offset, int nic_addr, vir_bytes count); 57 static void dp_pio16_user2nic(dpeth_t *dep, iovec_dat_t *iovp, vir_bytes offset, int nic_addr, vir_bytes count); 58 static void dp_pio8_nic2user(dpeth_t *dep, int nic_addr, iovec_dat_t *iovp, vir_bytes offset, vir_bytes count); 59 static void dp_pio16_nic2user(dpeth_t *dep, int nic_addr, iovec_dat_t *iovp, vir_bytes offset, vir_bytes count); 60 static void dp_next_iovec(iovec_dat_t *iovp); 61 static void conf_hw(dpeth_t *dep); 62 static void reply(dpeth_t *dep, int err, int may_block); 63 static void get_userdata(int user_proc, vir_bytes user_addr, vir_bytes count, void *loc_addr); 64 static void insb(port_t port, void *buf, size_t size); 65 static void insw(port_t port, void *buf, size_t size); 76 66 77 67 int do_probe(dpeth_t *dep) … … 226 216 count = mp->DL_COUNT; 227 217 if (port < 0 || port >= DE_PORT_NR) 228 panic("", "dp8390: illegal port", port);218 fprintf(stderr, "dp8390: illegal port\n"); 229 219 dep= &de_table[port]; 230 220 dep->de_client= mp->DL_PROC; … … 233 223 assert(!from_int); 234 224 // dep->de_flags |= DEF_PACK_SEND; 235 reply(dep, EOK, FALSE);225 reply(dep, EOK, false); 236 226 // return; 237 227 return EOK; … … 243 233 if ((dep->packet_queue) && (!from_int)) { 244 234 // if (dep->de_flags &DEF_SEND_AVAIL){ 245 // panic("", "dp8390: send already in progress", NO_NUM);235 // fprintf(stderr, "dp8390: send already in progress\n"); 246 236 return queue_packet(dep, packet); 247 237 } … … 250 240 // if (dep->de_sendq[sendq_head].sq_filled) { 251 241 // if (from_int) 252 // panic("", "dp8390: should not be sending\n", NO_NUM);242 // fprintf(stderr, "dp8390: should not be sending\n"); 253 243 // dep->de_sendmsg= *mp; 254 244 // dep->de_flags |= DEF_SEND_AVAIL; 255 // reply(dep, EOK, FALSE);245 // reply(dep, EOK, false); 256 246 // return; 257 247 // return queue_packet(dep, packet); … … 287 277 288 278 if (size < ETH_MIN_PACK_SIZE || size > ETH_MAX_PACK_SIZE_TAGGED) { 289 panic("", "dp8390: invalid packet size", size);279 fprintf(stderr, "dp8390: invalid packet size\n"); 290 280 return EINVAL; 291 281 } … … 294 284 dep->de_sendq[sendq_head].sq_sendpage * DP_PAGESIZE, 295 285 size); 296 dep->de_sendq[sendq_head].sq_filled= TRUE;286 dep->de_sendq[sendq_head].sq_filled= true; 297 287 if (dep->de_sendq_tail == sendq_head) { 298 288 outb_reg0(dep, DP_TPSR, dep->de_sendq[sendq_head].sq_sendpage); … … 318 308 return EOK; 319 309 320 reply(dep, EOK, FALSE);310 reply(dep, EOK, false); 321 311 322 312 assert(dep->de_mode == DEM_ENABLED); … … 499 489 500 490 if (!(dep->de_flags &DEF_ENABLED)) 501 panic("", "dp8390: got premature interrupt", NO_NUM);491 fprintf(stderr, "dp8390: got premature interrupt\n"); 502 492 503 493 for(;;) … … 645 635 vir_bytes length; 646 636 int packet_processed, r; 647 u 16_t eth_type;648 649 packet_processed = FALSE;637 uint16_t eth_type; 638 639 packet_processed = false; 650 640 pageno = inb_reg0(dep, DP_BNRY) + 1; 651 641 if (pageno == dep->de_stoppage) pageno = dep->de_startpage; … … 714 704 return; 715 705 716 packet_processed = TRUE;706 packet_processed = true; 717 707 dep->de_stat.ets_packetR++; 718 708 } … … 741 731 packet = dep->packet_queue; 742 732 dep->packet_queue = pq_detach(packet); 743 do_pwrite(dep, packet, TRUE);733 do_pwrite(dep, packet, true); 744 734 netif_pq_release(packet_get_id(packet)); 745 735 -- dep->packet_count; … … 750 740 /* switch(dep->de_sendmsg.m_type) 751 741 { 752 case DL_WRITE: do_vwrite(&dep->de_sendmsg, TRUE, FALSE); break;753 case DL_WRITEV: do_vwrite(&dep->de_sendmsg, TRUE, TRUE); break;754 case DL_WRITEV_S: do_vwrite_s(&dep->de_sendmsg, TRUE); break;742 case DL_WRITE: do_vwrite(&dep->de_sendmsg, true, false); break; 743 case DL_WRITEV: do_vwrite(&dep->de_sendmsg, true, true); break; 744 case DL_WRITEV_S: do_vwrite_s(&dep->de_sendmsg, true); break; 755 745 default: 756 panic("", "dp8390: wrong type", dep->de_sendmsg.m_type);746 fprintf(stderr, "dp8390: wrong type\n"); 757 747 break; 758 748 } … … 914 904 } 915 905 if (i == 100) 916 { 917 panic("", "dp8390: remote dma failed to complete", NO_NUM); 918 } 906 fprintf(stderr, "dp8390: remote dma failed to complete\n"); 919 907 } 920 908 … … 933 921 int i, r, user_proc; 934 922 vir_bytes bytes; 935 //u 8_t two_bytes[2];936 u 16_t two_bytes;923 //uint8_t two_bytes[2]; 924 uint16_t two_bytes; 937 925 int odd_byte; 938 926 … … 973 961 r= sys_vircopy(user_proc, D, vir_user, 974 962 // SELF, D, (vir_bytes)&two_bytes[1], 1); 975 SELF, D, (vir_bytes)&(((u 8_t *)&two_bytes)[1]), 1);963 SELF, D, (vir_bytes)&(((uint8_t *)&two_bytes)[1]), 1); 976 964 if (r != EOK) 977 { 978 panic("DP8390", 979 "dp_pio16_user2nic: sys_vircopy failed", 980 r); 981 } 982 //outw(dep->de_data_port, *(u16_t *)two_bytes); 965 fprintf(stderr, "DP8390: dp_pio16_user2nic: sys_vircopy failed\n"); 966 967 //outw(dep->de_data_port, *(uint16_t *)two_bytes); 983 968 outw(dep->de_data_port, two_bytes); 984 969 count--; … … 1005 990 r= sys_vircopy(user_proc, D, vir_user, 1006 991 // SELF, D, (vir_bytes)&two_bytes[0], 1); 1007 SELF, D, (vir_bytes)&(((u 8_t *)&two_bytes)[0]), 1);992 SELF, D, (vir_bytes)&(((uint8_t *)&two_bytes)[0]), 1); 1008 993 if (r != EOK) 1009 { 1010 panic("DP8390", 1011 "dp_pio16_user2nic: sys_vircopy failed", 1012 r); 1013 } 994 fprintf(stderr, "DP8390: dp_pio16_user2nic: sys_vircopy failed\n"); 995 1014 996 count--; 1015 997 offset++; … … 1022 1004 1023 1005 if (odd_byte) 1024 //outw(dep->de_data_port, *(u 16_t *)two_bytes);1006 //outw(dep->de_data_port, *(uint16_t *)two_bytes); 1025 1007 outw(dep->de_data_port, two_bytes); 1026 1008 … … 1031 1013 } 1032 1014 if (i == 100) 1033 { 1034 panic("", "dp8390: remote dma failed to complete", NO_NUM); 1035 } 1015 fprintf(stderr, "dp8390: remote dma failed to complete\n"); 1036 1016 } 1037 1017 … … 1098 1078 int i, r, user_proc; 1099 1079 vir_bytes bytes; 1100 //u 8_t two_bytes[2];1101 u 16_t two_bytes;1080 //uint8_t two_bytes[2]; 1081 uint16_t two_bytes; 1102 1082 int odd_byte; 1103 1083 … … 1136 1116 { 1137 1117 //r= sys_vircopy(SELF, D, (vir_bytes)&two_bytes[1], 1138 r= sys_vircopy(SELF, D, (vir_bytes)&(((u 8_t *)&two_bytes)[1]),1118 r= sys_vircopy(SELF, D, (vir_bytes)&(((uint8_t *)&two_bytes)[1]), 1139 1119 user_proc, D, vir_user, 1); 1140 1120 if (r != EOK) 1141 { 1142 panic("DP8390", 1143 "dp_pio16_nic2user: sys_vircopy failed", 1144 r); 1145 } 1121 fprintf(stderr, "DP8390: dp_pio16_nic2user: sys_vircopy failed\n"); 1122 1146 1123 count--; 1147 1124 offset++; … … 1165 1142 { 1166 1143 assert(bytes == 1); 1167 //*(u 16_t *)two_bytes= inw(dep->de_data_port);1144 //*(uint16_t *)two_bytes= inw(dep->de_data_port); 1168 1145 two_bytes= inw(dep->de_data_port); 1169 1146 //r= sys_vircopy(SELF, D, (vir_bytes)&two_bytes[0], 1170 r= sys_vircopy(SELF, D, (vir_bytes)&(((u 8_t *)&two_bytes)[0]),1147 r= sys_vircopy(SELF, D, (vir_bytes)&(((uint8_t *)&two_bytes)[0]), 1171 1148 user_proc, D, vir_user, 1); 1172 1149 if (r != EOK) 1173 { 1174 panic("DP8390", 1175 "dp_pio16_nic2user: sys_vircopy failed", 1176 r); 1177 } 1150 fprintf(stderr, "DP8390: dp_pio16_nic2user: sys_vircopy failed\n"); 1151 1178 1152 count--; 1179 1153 offset++; … … 1271 1245 1272 1246 if (r < 0) 1273 panic("", "dp8390: send failed:", r);1247 fprintf(stderr, "dp8390: send failed\n"); 1274 1248 1275 1249 */ dep->de_read_s = 0; … … 1291 1265 SELF, D, (vir_bytes)loc_addr, count); 1292 1266 if (r != EOK) 1293 panic("DP8390", "get_userdata: sys_vircopy failed", r);1267 fprintf(stderr, "DP8390: get_userdata: sys_vircopy failed\n"); 1294 1268 } 1295 1269
Note:
See TracChangeset
for help on using the changeset viewer.