Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.24-rc6 319 lines 7.3 kB view raw
1/*lcs.h*/ 2 3#include <linux/interrupt.h> 4#include <linux/netdevice.h> 5#include <linux/skbuff.h> 6#include <linux/workqueue.h> 7#include <asm/ccwdev.h> 8 9#define LCS_DBF_TEXT(level, name, text) \ 10 do { \ 11 debug_text_event(lcs_dbf_##name, level, text); \ 12 } while (0) 13 14#define LCS_DBF_HEX(level,name,addr,len) \ 15do { \ 16 debug_event(lcs_dbf_##name,level,(void*)(addr),len); \ 17} while (0) 18 19#define LCS_DBF_TEXT_(level,name,text...) \ 20do { \ 21 sprintf(debug_buffer, text); \ 22 debug_text_event(lcs_dbf_##name,level, debug_buffer);\ 23} while (0) 24 25/** 26 * sysfs related stuff 27 */ 28#define CARD_FROM_DEV(cdev) \ 29 (struct lcs_card *) \ 30 ((struct ccwgroup_device *)cdev->dev.driver_data)->dev.driver_data; 31/** 32 * CCW commands used in this driver 33 */ 34#define LCS_CCW_WRITE 0x01 35#define LCS_CCW_READ 0x02 36#define LCS_CCW_TRANSFER 0x08 37 38/** 39 * LCS device status primitives 40 */ 41#define LCS_CMD_STARTLAN 0x01 42#define LCS_CMD_STOPLAN 0x02 43#define LCS_CMD_LANSTAT 0x04 44#define LCS_CMD_STARTUP 0x07 45#define LCS_CMD_SHUTDOWN 0x08 46#define LCS_CMD_QIPASSIST 0xb2 47#define LCS_CMD_SETIPM 0xb4 48#define LCS_CMD_DELIPM 0xb5 49 50#define LCS_INITIATOR_TCPIP 0x00 51#define LCS_INITIATOR_LGW 0x01 52#define LCS_STD_CMD_SIZE 16 53#define LCS_MULTICAST_CMD_SIZE 404 54 55/** 56 * LCS IPASSIST MASKS,only used when multicast is switched on 57 */ 58/* Not supported by LCS */ 59#define LCS_IPASS_ARP_PROCESSING 0x0001 60#define LCS_IPASS_IN_CHECKSUM_SUPPORT 0x0002 61#define LCS_IPASS_OUT_CHECKSUM_SUPPORT 0x0004 62#define LCS_IPASS_IP_FRAG_REASSEMBLY 0x0008 63#define LCS_IPASS_IP_FILTERING 0x0010 64/* Supported by lcs 3172 */ 65#define LCS_IPASS_IPV6_SUPPORT 0x0020 66#define LCS_IPASS_MULTICAST_SUPPORT 0x0040 67 68/** 69 * LCS sense byte definitions 70 */ 71#define LCS_SENSE_BYTE_0 0 72#define LCS_SENSE_BYTE_1 1 73#define LCS_SENSE_BYTE_2 2 74#define LCS_SENSE_BYTE_3 3 75#define LCS_SENSE_INTERFACE_DISCONNECT 0x01 76#define LCS_SENSE_EQUIPMENT_CHECK 0x10 77#define LCS_SENSE_BUS_OUT_CHECK 0x20 78#define LCS_SENSE_INTERVENTION_REQUIRED 0x40 79#define LCS_SENSE_CMD_REJECT 0x80 80#define LCS_SENSE_RESETTING_EVENT 0x80 81#define LCS_SENSE_DEVICE_ONLINE 0x20 82 83/** 84 * LCS packet type definitions 85 */ 86#define LCS_FRAME_TYPE_CONTROL 0 87#define LCS_FRAME_TYPE_ENET 1 88#define LCS_FRAME_TYPE_TR 2 89#define LCS_FRAME_TYPE_FDDI 7 90#define LCS_FRAME_TYPE_AUTO -1 91 92/** 93 * some more definitions,we will sort them later 94 */ 95#define LCS_ILLEGAL_OFFSET 0xffff 96#define LCS_IOBUFFERSIZE 0x5000 97#define LCS_NUM_BUFFS 32 /* needs to be power of 2 */ 98#define LCS_MAC_LENGTH 6 99#define LCS_INVALID_PORT_NO -1 100#define LCS_LANCMD_TIMEOUT_DEFAULT 5 101 102/** 103 * Multicast state 104 */ 105#define LCS_IPM_STATE_SET_REQUIRED 0 106#define LCS_IPM_STATE_DEL_REQUIRED 1 107#define LCS_IPM_STATE_ON_CARD 2 108 109/** 110 * LCS IP Assist declarations 111 * seems to be only used for multicast 112 */ 113#define LCS_IPASS_ARP_PROCESSING 0x0001 114#define LCS_IPASS_INBOUND_CSUM_SUPP 0x0002 115#define LCS_IPASS_OUTBOUND_CSUM_SUPP 0x0004 116#define LCS_IPASS_IP_FRAG_REASSEMBLY 0x0008 117#define LCS_IPASS_IP_FILTERING 0x0010 118#define LCS_IPASS_IPV6_SUPPORT 0x0020 119#define LCS_IPASS_MULTICAST_SUPPORT 0x0040 120 121/** 122 * LCS Buffer states 123 */ 124enum lcs_buffer_states { 125 LCS_BUF_STATE_EMPTY, /* buffer is empty */ 126 LCS_BUF_STATE_LOCKED, /* buffer is locked, don't touch */ 127 LCS_BUF_STATE_READY, /* buffer is ready for read/write */ 128 LCS_BUF_STATE_PROCESSED, 129}; 130 131/** 132 * LCS Channel State Machine declarations 133 */ 134enum lcs_channel_states { 135 LCS_CH_STATE_INIT, 136 LCS_CH_STATE_HALTED, 137 LCS_CH_STATE_STOPPED, 138 LCS_CH_STATE_RUNNING, 139 LCS_CH_STATE_SUSPENDED, 140 LCS_CH_STATE_CLEARED, 141 LCS_CH_STATE_ERROR, 142}; 143 144/** 145 * LCS device state machine 146 */ 147enum lcs_dev_states { 148 DEV_STATE_DOWN, 149 DEV_STATE_UP, 150 DEV_STATE_RECOVER, 151}; 152 153enum lcs_threads { 154 LCS_SET_MC_THREAD = 1, 155 LCS_RECOVERY_THREAD = 2, 156}; 157 158/** 159 * LCS struct declarations 160 */ 161struct lcs_header { 162 __u16 offset; 163 __u8 type; 164 __u8 slot; 165} __attribute__ ((packed)); 166 167struct lcs_ip_mac_pair { 168 __be32 ip_addr; 169 __u8 mac_addr[LCS_MAC_LENGTH]; 170 __u8 reserved[2]; 171} __attribute__ ((packed)); 172 173struct lcs_ipm_list { 174 struct list_head list; 175 struct lcs_ip_mac_pair ipm; 176 __u8 ipm_state; 177}; 178 179struct lcs_cmd { 180 __u16 offset; 181 __u8 type; 182 __u8 slot; 183 __u8 cmd_code; 184 __u8 initiator; 185 __u16 sequence_no; 186 __u16 return_code; 187 union { 188 struct { 189 __u8 lan_type; 190 __u8 portno; 191 __u16 parameter_count; 192 __u8 operator_flags[3]; 193 __u8 reserved[3]; 194 } lcs_std_cmd; 195 struct { 196 __u16 unused1; 197 __u16 buff_size; 198 __u8 unused2[6]; 199 } lcs_startup; 200 struct { 201 __u8 lan_type; 202 __u8 portno; 203 __u8 unused[10]; 204 __u8 mac_addr[LCS_MAC_LENGTH]; 205 __u32 num_packets_deblocked; 206 __u32 num_packets_blocked; 207 __u32 num_packets_tx_on_lan; 208 __u32 num_tx_errors_detected; 209 __u32 num_tx_packets_disgarded; 210 __u32 num_packets_rx_from_lan; 211 __u32 num_rx_errors_detected; 212 __u32 num_rx_discarded_nobuffs_avail; 213 __u32 num_rx_packets_too_large; 214 } lcs_lanstat_cmd; 215#ifdef CONFIG_IP_MULTICAST 216 struct { 217 __u8 lan_type; 218 __u8 portno; 219 __u16 num_ip_pairs; 220 __u16 ip_assists_supported; 221 __u16 ip_assists_enabled; 222 __u16 version; 223 struct { 224 struct lcs_ip_mac_pair 225 ip_mac_pair[32]; 226 __u32 response_data; 227 } lcs_ipass_ctlmsg __attribute ((packed)); 228 } lcs_qipassist __attribute__ ((packed)); 229#endif /*CONFIG_IP_MULTICAST */ 230 } cmd __attribute__ ((packed)); 231} __attribute__ ((packed)); 232 233/** 234 * Forward declarations. 235 */ 236struct lcs_card; 237struct lcs_channel; 238 239/** 240 * Definition of an lcs buffer. 241 */ 242struct lcs_buffer { 243 enum lcs_buffer_states state; 244 void *data; 245 int count; 246 /* Callback for completion notification. */ 247 void (*callback)(struct lcs_channel *, struct lcs_buffer *); 248}; 249 250struct lcs_reply { 251 struct list_head list; 252 __u16 sequence_no; 253 atomic_t refcnt; 254 /* Callback for completion notification. */ 255 void (*callback)(struct lcs_card *, struct lcs_cmd *); 256 wait_queue_head_t wait_q; 257 struct lcs_card *card; 258 int received; 259 int rc; 260}; 261 262/** 263 * Definition of an lcs channel 264 */ 265struct lcs_channel { 266 enum lcs_channel_states state; 267 struct ccw_device *ccwdev; 268 struct ccw1 ccws[LCS_NUM_BUFFS + 1]; 269 wait_queue_head_t wait_q; 270 struct tasklet_struct irq_tasklet; 271 struct lcs_buffer iob[LCS_NUM_BUFFS]; 272 int io_idx; 273 int buf_idx; 274}; 275 276 277/** 278 * definition of the lcs card 279 */ 280struct lcs_card { 281 spinlock_t lock; 282 spinlock_t ipm_lock; 283 enum lcs_dev_states state; 284 struct net_device *dev; 285 struct net_device_stats stats; 286 __be16 (*lan_type_trans)(struct sk_buff *skb, 287 struct net_device *dev); 288 struct ccwgroup_device *gdev; 289 struct lcs_channel read; 290 struct lcs_channel write; 291 struct lcs_buffer *tx_buffer; 292 int tx_emitted; 293 struct list_head lancmd_waiters; 294 int lancmd_timeout; 295 296 struct work_struct kernel_thread_starter; 297 spinlock_t mask_lock; 298 unsigned long thread_start_mask; 299 unsigned long thread_running_mask; 300 unsigned long thread_allowed_mask; 301 wait_queue_head_t wait_q; 302 303#ifdef CONFIG_IP_MULTICAST 304 struct list_head ipm_list; 305#endif 306 __u8 mac[LCS_MAC_LENGTH]; 307 __u16 ip_assists_supported; 308 __u16 ip_assists_enabled; 309 __s8 lan_type; 310 __u32 pkt_seq; 311 __u16 sequence_no; 312 __s16 portno; 313 /* Some info copied from probeinfo */ 314 u8 device_forced; 315 u8 max_port_no; 316 u8 hint_port_no; 317 s16 port_protocol_no; 318} __attribute__ ((aligned(8))); 319