cregit-Linux how code gets into the kernel

Release 4.18 arch/um/drivers/vector_kern.h

Directory: arch/um/drivers
/*
 * Copyright (C) 2002 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
 * Licensed under the GPL
 */

#ifndef __UM_VECTOR_KERN_H

#define __UM_VECTOR_KERN_H

#include <linux/netdevice.h>
#include <linux/platform_device.h>
#include <linux/skbuff.h>
#include <linux/socket.h>
#include <linux/list.h>
#include <linux/ctype.h>
#include <linux/workqueue.h>
#include <linux/interrupt.h>
#include "vector_user.h"

/* Queue structure specially adapted for multiple enqueue/dequeue
 * in a mmsgrecv/mmsgsend context
 */

/* Dequeue method */


#define QUEUE_SENDMSG 0

#define QUEUE_SENDMMSG 1


#define VECTOR_RX 1

#define VECTOR_TX (1 << 1)

#define VECTOR_BPF (1 << 2)

#define VECTOR_QDISC_BYPASS (1 << 3)


#define ETH_MAX_PACKET 1500

#define ETH_HEADER_OTHER 32 
/* just in case someone decides to go mad on QnQ */


struct vector_queue {
	
struct mmsghdr *mmsg_vector;
	
void **skbuff_vector;
	 /* backlink to device which owns us */
	
struct net_device *dev;
	
spinlock_t head_lock;
	
spinlock_t tail_lock;
	




int queue_depth, head, tail, max_depth, max_iov_frags;
	
short options;
};


struct vector_estats {
	
uint64_t rx_queue_max;
	
uint64_t rx_queue_running_average;
	
uint64_t tx_queue_max;
	
uint64_t tx_queue_running_average;
	
uint64_t rx_encaps_errors;
	
uint64_t tx_timeout_count;
	
uint64_t tx_restart_queue;
	
uint64_t tx_kicks;
	
uint64_t tx_flow_control_xon;
	
uint64_t tx_flow_control_xoff;
	
uint64_t rx_csum_offload_good;
	
uint64_t rx_csum_offload_errors;
	
uint64_t sg_ok;
	
uint64_t sg_linearized;
};


#define VERIFY_HEADER_NOK -1

#define VERIFY_HEADER_OK 0

#define VERIFY_CSUM_OK 1


struct vector_private {
	
struct list_head list;
	
spinlock_t lock;
	
struct net_device *dev;

	
int unit;

	/* Timeout timer in TX */

	
struct timer_list tl;

	/* Scheduled "remove device" work */
	
struct work_struct reset_tx;
	
struct vector_fds *fds;

	
struct vector_queue *rx_queue;
	
struct vector_queue *tx_queue;

	
int rx_irq;
	
int tx_irq;

	
struct arglist *parsed;

	
void *transport_data; /* transport specific params if needed */

	
int max_packet;
	
int req_size; /* different from max packet - used for TSO */
	
int headroom;

	
int options;

	/* remote address if any - some transports will leave this as null */

	
int header_size;
	
int rx_header_size;
	
int coalesce;

	
void *header_rxbuffer;
	
void *header_txbuffer;

	
int (*form_header)(uint8_t *header,
		struct sk_buff *skb, struct vector_private *vp);
	
int (*verify_header)(uint8_t *header,
		struct sk_buff *skb, struct vector_private *vp);

	
spinlock_t stats_lock;

	
struct tasklet_struct tx_poll;
	
bool rexmit_scheduled;
	
bool opened;
	
bool in_write_poll;

	/* ethtool stats */

	
struct vector_estats estats;
	
void *bpf;

	
char user[0];
};

extern int build_transport_data(struct vector_private *vp);

#endif

Overall Contributors

PersonTokensPropCommitsCommitProp
Anton Ivanov346100.00%2100.00%
Total346100.00%2100.00%
Directory: arch/um/drivers
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.