|  | @@ -85,3 +85,185 @@ struct iop3xx_aau_e_desc_ctrl {
 | 
	
		
			
				|  |  |  struct iop3xx_dma_desc_ctrl {
 | 
	
		
			
				|  |  |  	unsigned int pci_transaction:4;
 | 
	
		
			
				|  |  |  	unsigned int int_en:1;
 | 
	
		
			
				|  |  | +	unsigned int dac_cycle_en:1;
 | 
	
		
			
				|  |  | +	unsigned int mem_to_mem_en:1;
 | 
	
		
			
				|  |  | +	unsigned int crc_data_tx_en:1;
 | 
	
		
			
				|  |  | +	unsigned int crc_gen_en:1;
 | 
	
		
			
				|  |  | +	unsigned int crc_seed_dis:1;
 | 
	
		
			
				|  |  | +	unsigned int reserved:21;
 | 
	
		
			
				|  |  | +	unsigned int crc_tx_complete:1;
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +struct iop3xx_desc_dma {
 | 
	
		
			
				|  |  | +	u32 next_desc;
 | 
	
		
			
				|  |  | +	union {
 | 
	
		
			
				|  |  | +		u32 pci_src_addr;
 | 
	
		
			
				|  |  | +		u32 pci_dest_addr;
 | 
	
		
			
				|  |  | +		u32 src_addr;
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  | +	union {
 | 
	
		
			
				|  |  | +		u32 upper_pci_src_addr;
 | 
	
		
			
				|  |  | +		u32 upper_pci_dest_addr;
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  | +	union {
 | 
	
		
			
				|  |  | +		u32 local_pci_src_addr;
 | 
	
		
			
				|  |  | +		u32 local_pci_dest_addr;
 | 
	
		
			
				|  |  | +		u32 dest_addr;
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  | +	u32 byte_count;
 | 
	
		
			
				|  |  | +	union {
 | 
	
		
			
				|  |  | +		u32 desc_ctrl;
 | 
	
		
			
				|  |  | +		struct iop3xx_dma_desc_ctrl desc_ctrl_field;
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  | +	u32 crc_addr;
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +struct iop3xx_desc_aau {
 | 
	
		
			
				|  |  | +	u32 next_desc;
 | 
	
		
			
				|  |  | +	u32 src[4];
 | 
	
		
			
				|  |  | +	u32 dest_addr;
 | 
	
		
			
				|  |  | +	u32 byte_count;
 | 
	
		
			
				|  |  | +	union {
 | 
	
		
			
				|  |  | +		u32 desc_ctrl;
 | 
	
		
			
				|  |  | +		struct iop3xx_aau_desc_ctrl desc_ctrl_field;
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  | +	union {
 | 
	
		
			
				|  |  | +		u32 src_addr;
 | 
	
		
			
				|  |  | +		u32 e_desc_ctrl;
 | 
	
		
			
				|  |  | +		struct iop3xx_aau_e_desc_ctrl e_desc_ctrl_field;
 | 
	
		
			
				|  |  | +	} src_edc[31];
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +struct iop3xx_aau_gfmr {
 | 
	
		
			
				|  |  | +	unsigned int gfmr1:8;
 | 
	
		
			
				|  |  | +	unsigned int gfmr2:8;
 | 
	
		
			
				|  |  | +	unsigned int gfmr3:8;
 | 
	
		
			
				|  |  | +	unsigned int gfmr4:8;
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +struct iop3xx_desc_pq_xor {
 | 
	
		
			
				|  |  | +	u32 next_desc;
 | 
	
		
			
				|  |  | +	u32 src[3];
 | 
	
		
			
				|  |  | +	union {
 | 
	
		
			
				|  |  | +		u32 data_mult1;
 | 
	
		
			
				|  |  | +		struct iop3xx_aau_gfmr data_mult1_field;
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  | +	u32 dest_addr;
 | 
	
		
			
				|  |  | +	u32 byte_count;
 | 
	
		
			
				|  |  | +	union {
 | 
	
		
			
				|  |  | +		u32 desc_ctrl;
 | 
	
		
			
				|  |  | +		struct iop3xx_aau_desc_ctrl desc_ctrl_field;
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  | +	union {
 | 
	
		
			
				|  |  | +		u32 src_addr;
 | 
	
		
			
				|  |  | +		u32 e_desc_ctrl;
 | 
	
		
			
				|  |  | +		struct iop3xx_aau_e_desc_ctrl e_desc_ctrl_field;
 | 
	
		
			
				|  |  | +		u32 data_multiplier;
 | 
	
		
			
				|  |  | +		struct iop3xx_aau_gfmr data_mult_field;
 | 
	
		
			
				|  |  | +		u32 reserved;
 | 
	
		
			
				|  |  | +	} src_edc_gfmr[19];
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +struct iop3xx_desc_dual_xor {
 | 
	
		
			
				|  |  | +	u32 next_desc;
 | 
	
		
			
				|  |  | +	u32 src0_addr;
 | 
	
		
			
				|  |  | +	u32 src1_addr;
 | 
	
		
			
				|  |  | +	u32 h_src_addr;
 | 
	
		
			
				|  |  | +	u32 d_src_addr;
 | 
	
		
			
				|  |  | +	u32 h_dest_addr;
 | 
	
		
			
				|  |  | +	u32 byte_count;
 | 
	
		
			
				|  |  | +	union {
 | 
	
		
			
				|  |  | +		u32 desc_ctrl;
 | 
	
		
			
				|  |  | +		struct iop3xx_aau_desc_ctrl desc_ctrl_field;
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  | +	u32 d_dest_addr;
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +union iop3xx_desc {
 | 
	
		
			
				|  |  | +	struct iop3xx_desc_aau *aau;
 | 
	
		
			
				|  |  | +	struct iop3xx_desc_dma *dma;
 | 
	
		
			
				|  |  | +	struct iop3xx_desc_pq_xor *pq_xor;
 | 
	
		
			
				|  |  | +	struct iop3xx_desc_dual_xor *dual_xor;
 | 
	
		
			
				|  |  | +	void *ptr;
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/* No support for p+q operations */
 | 
	
		
			
				|  |  | +static inline int
 | 
	
		
			
				|  |  | +iop_chan_pq_slot_count(size_t len, int src_cnt, int *slots_per_op)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	BUG();
 | 
	
		
			
				|  |  | +	return 0;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static inline void
 | 
	
		
			
				|  |  | +iop_desc_init_pq(struct iop_adma_desc_slot *desc, int src_cnt,
 | 
	
		
			
				|  |  | +		  unsigned long flags)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	BUG();
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static inline void
 | 
	
		
			
				|  |  | +iop_desc_set_pq_addr(struct iop_adma_desc_slot *desc, dma_addr_t *addr)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	BUG();
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static inline void
 | 
	
		
			
				|  |  | +iop_desc_set_pq_src_addr(struct iop_adma_desc_slot *desc, int src_idx,
 | 
	
		
			
				|  |  | +			 dma_addr_t addr, unsigned char coef)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	BUG();
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static inline int
 | 
	
		
			
				|  |  | +iop_chan_pq_zero_sum_slot_count(size_t len, int src_cnt, int *slots_per_op)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	BUG();
 | 
	
		
			
				|  |  | +	return 0;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static inline void
 | 
	
		
			
				|  |  | +iop_desc_init_pq_zero_sum(struct iop_adma_desc_slot *desc, int src_cnt,
 | 
	
		
			
				|  |  | +			  unsigned long flags)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	BUG();
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static inline void
 | 
	
		
			
				|  |  | +iop_desc_set_pq_zero_sum_byte_count(struct iop_adma_desc_slot *desc, u32 len)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	BUG();
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#define iop_desc_set_pq_zero_sum_src_addr iop_desc_set_pq_src_addr
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static inline void
 | 
	
		
			
				|  |  | +iop_desc_set_pq_zero_sum_addr(struct iop_adma_desc_slot *desc, int pq_idx,
 | 
	
		
			
				|  |  | +			      dma_addr_t *src)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	BUG();
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static inline int iop_adma_get_max_xor(void)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	return 32;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static inline int iop_adma_get_max_pq(void)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	BUG();
 | 
	
		
			
				|  |  | +	return 0;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static inline u32 iop_chan_get_current_descriptor(struct iop_adma_chan *chan)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	int id = chan->device->id;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	switch (id) {
 | 
	
		
			
				|  |  | +	case DMA0_ID:
 | 
	
		
			
				|  |  | +	case DMA1_ID:
 | 
	
		
			
				|  |  | +		return __raw_readl(DMA_DAR(chan));
 | 
	
		
			
				|  |  | +	case AAU_ID:
 | 
	
		
			
				|  |  | +		return __raw_readl(AAU_ADAR(chan));
 | 
	
		
			
				|  |  | +	default:
 | 
	
		
			
				|  |  | +		BUG();
 |