Changes in uspace/lib/c/include/net/device.h [00d7e1b:9d58539] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/include/net/device.h
r00d7e1b r9d58539 1 1 /* 2 2 * Copyright (c) 2009 Lukas Mejdrech 3 * Copyright (c) 2011 Radim Vansa4 3 * All rights reserved. 5 4 * … … 33 32 34 33 /** @file 35 * Device identifier, state and usage statistics.34 * Network device. 36 35 */ 37 36 38 #ifndef LIBC_ DEVICE_ID_TYPE_H_39 #define LIBC_ DEVICE_ID_TYPE_H_37 #ifndef LIBC_NET_DEVICE_H_ 38 #define LIBC_NET_DEVICE_H_ 40 39 41 40 #include <adt/int_map.h> 42 #include <net/eth_phys.h> 43 #include <bool.h> 44 45 /** Ethernet address length. */ 46 #define ETH_ADDR 6 47 48 /** MAC printing format */ 49 #define PRIMAC "%02x:%02x:%02x:%02x:%02x:%02x" 50 51 /** MAC arguments */ 52 #define ARGSMAC(__a) \ 53 (__a)[0], (__a)[1], (__a)[2], (__a)[3], (__a)[4], (__a)[5] 54 55 /* Compare MAC address with specific value */ 56 #define MAC_EQUALS_VALUE(__a, __a0, __a1, __a2, __a3, __a4, __a5) \ 57 ((__a)[0] == (__a0) && (__a)[1] == (__a1) && (__a)[2] == (__a2) \ 58 && (__a)[3] == (__a3) && (__a)[4] == (__a4) && (__a)[5] == (__a5)) 59 60 #define MAC_IS_ZERO(__x) \ 61 MAC_EQUALS_VALUE(__x, 0, 0, 0, 0, 0, 0) 41 #include <nic/nic.h> 62 42 63 43 /** Device identifier to generic type map declaration. */ … … 67 47 #define DEVICE_MAP_IMPLEMENT INT_MAP_IMPLEMENT 68 48 69 /** Max length of any hw nic address (currently only eth)*/70 #define NIC_MAX_ADDRESS_LENGTH 16 49 /** Device identifier type. */ 50 typedef int nic_device_id_t; 71 51 72 52 /** Invalid device identifier. */ 73 53 #define NIC_DEVICE_INVALID_ID (-1) 74 75 #define NIC_VENDOR_MAX_LENGTH 6476 #define NIC_MODEL_MAX_LENGTH 6477 #define NIC_PART_NUMBER_MAX_LENGTH 6478 #define NIC_SERIAL_NUMBER_MAX_LENGTH 6479 80 /**81 * The bitmap uses single bit for each of the 2^12 = 4096 possible VLAN tags.82 * This means its size is 4096/8 = 512 bytes.83 */84 #define NIC_VLAN_BITMAP_SIZE 51285 86 #define NIC_DEVICE_PRINT_FMT "%x"87 88 /** Device identifier type. */89 typedef int nic_device_id_t;90 91 /**92 * Structure covering the MAC address.93 */94 typedef struct nic_address {95 uint8_t address[ETH_ADDR];96 } nic_address_t;97 98 /** Device state. */99 typedef enum nic_device_state {100 /**101 * Device present and stopped. Moving device to this state means to discard102 * all settings and WOL virtues, rebooting the NIC to state as if the103 * computer just booted (or the NIC was just inserted in case of removable104 * NIC).105 */106 NIC_STATE_STOPPED,107 /**108 * If the NIC is in this state no packets (frames) are transmitted nor109 * received. However, the settings are not restarted. You can use this state110 * to temporarily disable transmition/reception or atomically (with respect111 * to incoming/outcoming packets) change frames acceptance etc.112 */113 NIC_STATE_DOWN,114 /** Device is normally operating. */115 NIC_STATE_ACTIVE,116 /** Just a constant to limit the state numbers */117 NIC_STATE_MAX,118 } nic_device_state_t;119 120 /**121 * Channel operating mode used on the medium.122 */123 typedef enum {124 NIC_CM_UNKNOWN,125 NIC_CM_FULL_DUPLEX,126 NIC_CM_HALF_DUPLEX,127 NIC_CM_SIMPLEX128 } nic_channel_mode_t;129 130 /**131 * Role for the device (used e.g. for 1000Gb ethernet)132 */133 typedef enum {134 NIC_ROLE_UNKNOWN,135 NIC_ROLE_AUTO,136 NIC_ROLE_MASTER,137 NIC_ROLE_SLAVE138 } nic_role_t;139 140 /**141 * Current state of the cable in the device142 */143 typedef enum {144 NIC_CS_UNKNOWN,145 NIC_CS_PLUGGED,146 NIC_CS_UNPLUGGED147 } nic_cable_state_t;148 149 /**150 * Result of the requested operation151 */152 typedef enum {153 /** Successfully disabled */154 NIC_RESULT_DISABLED,155 /** Successfully enabled */156 NIC_RESULT_ENABLED,157 /** Not supported at all */158 NIC_RESULT_NOT_SUPPORTED,159 /** Temporarily not available */160 NIC_RESULT_NOT_AVAILABLE,161 /** Result extensions */162 NIC_RESULT_FIRST_EXTENSION163 } nic_result_t;164 165 /** Device usage statistics. */166 typedef struct nic_device_stats {167 /** Total packets received (accepted). */168 unsigned long receive_packets;169 /** Total packets transmitted. */170 unsigned long send_packets;171 /** Total bytes received (accepted). */172 unsigned long receive_bytes;173 /** Total bytes transmitted. */174 unsigned long send_bytes;175 /** Bad packets received counter. */176 unsigned long receive_errors;177 /** Packet transmition problems counter. */178 unsigned long send_errors;179 /** Number of frames dropped due to insufficient space in RX buffers */180 unsigned long receive_dropped;181 /** Number of frames dropped due to insufficient space in TX buffers */182 unsigned long send_dropped;183 /** Total multicast packets received (accepted). */184 unsigned long receive_multicast;185 /** Total broadcast packets received (accepted). */186 unsigned long receive_broadcast;187 /** The number of collisions due to congestion on the medium. */188 unsigned long collisions;189 /** Unicast packets received but not accepted (filtered) */190 unsigned long receive_filtered_unicast;191 /** Multicast packets received but not accepted (filtered) */192 unsigned long receive_filtered_multicast;193 /** Broadcast packets received but not accepted (filtered) */194 unsigned long receive_filtered_broadcast;195 196 /* detailed receive_errors */197 198 /** Received packet length error counter. */199 unsigned long receive_length_errors;200 /** Receiver buffer overflow counter. */201 unsigned long receive_over_errors;202 /** Received packet with crc error counter. */203 unsigned long receive_crc_errors;204 /** Received frame alignment error counter. */205 unsigned long receive_frame_errors;206 /** Receiver fifo overrun counter. */207 unsigned long receive_fifo_errors;208 /** Receiver missed packet counter. */209 unsigned long receive_missed_errors;210 211 /* detailed send_errors */212 213 /** Transmitter aborted counter. */214 unsigned long send_aborted_errors;215 /** Transmitter carrier errors counter. */216 unsigned long send_carrier_errors;217 /** Transmitter fifo overrun counter. */218 unsigned long send_fifo_errors;219 /** Transmitter carrier errors counter. */220 unsigned long send_heartbeat_errors;221 /** Transmitter window errors counter. */222 unsigned long send_window_errors;223 224 /* for cslip etc */225 226 /** Total compressed packets received. */227 unsigned long receive_compressed;228 /** Total compressed packet transmitted. */229 unsigned long send_compressed;230 } nic_device_stats_t;231 232 /** Errors corresponding to those in the nic_device_stats_t */233 typedef enum {234 NIC_SEC_BUFFER_FULL,235 NIC_SEC_ABORTED,236 NIC_SEC_CARRIER_LOST,237 NIC_SEC_FIFO_OVERRUN,238 NIC_SEC_HEARTBEAT,239 NIC_SEC_WINDOW_ERROR,240 /* Error encountered during TX but with other type of error */241 NIC_SEC_OTHER242 } nic_send_error_cause_t;243 244 /** Errors corresponding to those in the nic_device_stats_t */245 typedef enum {246 NIC_REC_BUFFER_FULL,247 NIC_REC_LENGTH,248 NIC_REC_BUFFER_OVERFLOW,249 NIC_REC_CRC,250 NIC_REC_FRAME_ALIGNMENT,251 NIC_REC_FIFO_OVERRUN,252 NIC_REC_MISSED,253 /* Error encountered during RX but with other type of error */254 NIC_REC_OTHER255 } nic_receive_error_cause_t;256 257 /**258 * Information about the NIC that never changes - name, vendor, model,259 * capabilites and so on.260 */261 typedef struct nic_device_info {262 /* Device identification */263 char vendor_name[NIC_VENDOR_MAX_LENGTH];264 char model_name[NIC_MODEL_MAX_LENGTH];265 char part_number[NIC_PART_NUMBER_MAX_LENGTH];266 char serial_number[NIC_SERIAL_NUMBER_MAX_LENGTH];267 uint16_t vendor_id;268 uint16_t device_id;269 uint16_t subsystem_vendor_id;270 uint16_t subsystem_id;271 /* Device capabilities */272 uint16_t ethernet_support[ETH_PHYS_LAYERS];273 274 /** The mask of all modes which the device can advertise275 *276 * see ETH_AUTONEG_ macros in net/eth_phys.h of libc277 */278 uint32_t autoneg_support;279 } nic_device_info_t;280 281 /**282 * Type of the ethernet frame283 */284 typedef enum nic_frame_type {285 NIC_FRAME_UNICAST,286 NIC_FRAME_MULTICAST,287 NIC_FRAME_BROADCAST288 } nic_frame_type_t;289 290 /**291 * Specifies which unicast frames is the NIC receiving.292 */293 typedef enum nic_unicast_mode {294 NIC_UNICAST_UNKNOWN,295 /** No unicast frames are received */296 NIC_UNICAST_BLOCKED,297 /** Only the frames with this NIC's MAC as destination are received */298 NIC_UNICAST_DEFAULT,299 /**300 * Both frames with this NIC's MAC and those specified in the list are301 * received302 */303 NIC_UNICAST_LIST,304 /** All unicast frames are received */305 NIC_UNICAST_PROMISC306 } nic_unicast_mode_t;307 308 typedef enum nic_multicast_mode {309 NIC_MULTICAST_UNKNOWN,310 /** No multicast frames are received */311 NIC_MULTICAST_BLOCKED,312 /** Frames with multicast addresses specified in this list are received */313 NIC_MULTICAST_LIST,314 /** All multicast frames are received */315 NIC_MULTICAST_PROMISC316 } nic_multicast_mode_t;317 318 typedef enum nic_broadcast_mode {319 NIC_BROADCAST_UNKNOWN,320 /** Broadcast frames are dropped */321 NIC_BROADCAST_BLOCKED,322 /** Broadcast frames are received */323 NIC_BROADCAST_ACCEPTED324 } nic_broadcast_mode_t;325 326 /**327 * Structure covering the bitmap with VLAN tags.328 */329 typedef struct nic_vlan_mask {330 uint8_t bitmap[NIC_VLAN_BITMAP_SIZE];331 } nic_vlan_mask_t;332 333 /* WOL virtue identifier */334 typedef unsigned int nic_wv_id_t;335 336 /**337 * Structure passed as argument for virtue NIC_WV_MAGIC_PACKET.338 */339 typedef struct nic_wv_magic_packet_data {340 uint8_t password[6];341 } nic_wv_magic_packet_data_t;342 343 /**344 * Structure passed as argument for virtue NIC_WV_DIRECTED_IPV4345 */346 typedef struct nic_wv_ipv4_data {347 uint8_t address[4];348 } nic_wv_ipv4_data_t;349 350 /**351 * Structure passed as argument for virtue NIC_WV_DIRECTED_IPV6352 */353 typedef struct nic_wv_ipv6_data {354 uint8_t address[16];355 } nic_wv_ipv6_data_t;356 357 /**358 * WOL virtue types defining the interpretation of data passed to the virtue.359 * Those tagged with S can have only single virtue active at one moment, those360 * tagged with M can have multiple ones.361 */362 typedef enum nic_wv_type {363 /**364 * Used for deletion of the virtue - in this case the mask, data and length365 * arguments are ignored.366 */367 NIC_WV_NONE,368 /** S369 * Enabled <=> wakeup upon link change370 */371 NIC_WV_LINK_CHANGE,372 /** S373 * If this virtue is set up, wakeup can be issued by a magic packet frame.374 * If the data argument is not NULL, it must contain375 * nic_wv_magic_packet_data structure with the SecureOn password.376 */377 NIC_WV_MAGIC_PACKET,378 /** M379 * If the virtue is set up, wakeup can be issued by a frame targeted to380 * device with MAC address specified in data. The data must contain381 * nic_address_t structure.382 */383 NIC_WV_DESTINATION,384 /** S385 * Enabled <=> wakeup upon receiving broadcast frame386 */387 NIC_WV_BROADCAST,388 /** S389 * Enabled <=> wakeup upon receiving ARP Request390 */391 NIC_WV_ARP_REQUEST,392 /** M393 * If enabled, the wakeup is issued upon receiving frame with an IPv4 packet394 * with IPv4 address specified in data. The data must contain395 * nic_wv_ipv4_data structure.396 */397 NIC_WV_DIRECTED_IPV4,398 /** M399 * If enabled, the wakeup is issued upon receiving frame with an IPv4 packet400 * with IPv6 address specified in data. The data must contain401 * nic_wv_ipv6_data structure.402 */403 NIC_WV_DIRECTED_IPV6,404 /** M405 * First length/2 bytes in the argument are interpreted as mask, second406 * length/2 bytes are interpreted as content.407 * If enabled, the wakeup is issued upon receiving frame where the bytes408 * with non-zero value in the mask equal to those in the content.409 */410 NIC_WV_FULL_MATCH,411 /**412 * Dummy value, do not use.413 */414 NIC_WV_MAX415 } nic_wv_type_t;416 417 /**418 * Specifies the interrupt/polling mode used by the driver and NIC419 */420 typedef enum nic_poll_mode {421 /**422 * NIC issues interrupts upon events.423 */424 NIC_POLL_IMMEDIATE,425 /**426 * Some uspace app calls nic_poll_now(...) in order to check the NIC state427 * - no interrupts are received from the NIC.428 */429 NIC_POLL_ON_DEMAND,430 /**431 * The driver itself issues a poll request in a periodic manner. It is432 * allowed to use hardware timer if the NIC supports it.433 */434 NIC_POLL_PERIODIC,435 /**436 * The driver itself issued a poll request in a periodic manner. The driver437 * must create software timer, internal hardware timer of NIC must not be438 * used even if the NIC supports it.439 */440 NIC_POLL_SOFTWARE_PERIODIC441 } nic_poll_mode_t;442 443 /**444 * Says if this virtue type is a multi-virtue (there can be multiple virtues of445 * this type at once).446 *447 * @param type448 *449 * @return true or false450 */451 static inline int nic_wv_is_multi(nic_wv_type_t type) {452 switch (type) {453 case NIC_WV_FULL_MATCH:454 case NIC_WV_DESTINATION:455 case NIC_WV_DIRECTED_IPV4:456 case NIC_WV_DIRECTED_IPV6:457 return true;458 default:459 return false;460 }461 }462 463 static inline const char *nic_device_state_to_string(nic_device_state_t state)464 {465 switch (state) {466 case NIC_STATE_STOPPED:467 return "stopped";468 case NIC_STATE_DOWN:469 return "down";470 case NIC_STATE_ACTIVE:471 return "active";472 default:473 return "undefined";474 }475 }476 54 477 55 #endif
Note:
See TracChangeset
for help on using the changeset viewer.