1/* Freescale QUICC Engine HDLC Device Driver 2 * 3 * Copyright 2014 Freescale Semiconductor Inc. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License as published by the 7 * Free Software Foundation; either version 2 of the License, or (at your 8 * option) any later version. 9 */ 10 11#ifndef _UCC_HDLC_H_ 12#define _UCC_HDLC_H_ 13 14#include <linux/kernel.h> 15#include <linux/list.h> 16 17#include <soc/fsl/qe/immap_qe.h> 18#include <soc/fsl/qe/qe.h> 19 20#include <soc/fsl/qe/ucc.h> 21#include <soc/fsl/qe/ucc_fast.h> 22 23/* UCC HDLC event register */ 24#define UCCE_HDLC_RX_EVENTS \ 25(UCC_HDLC_UCCE_RXF | UCC_HDLC_UCCE_RXB | UCC_HDLC_UCCE_BSY) 26#define UCCE_HDLC_TX_EVENTS (UCC_HDLC_UCCE_TXB | UCC_HDLC_UCCE_TXE) 27 28struct ucc_hdlc_param { 29 __be16 riptr; 30 __be16 tiptr; 31 __be16 res0; 32 __be16 mrblr; 33 __be32 rstate; 34 __be32 rbase; 35 __be16 rbdstat; 36 __be16 rbdlen; 37 __be32 rdptr; 38 __be32 tstate; 39 __be32 tbase; 40 __be16 tbdstat; 41 __be16 tbdlen; 42 __be32 tdptr; 43 __be32 rbptr; 44 __be32 tbptr; 45 __be32 rcrc; 46 __be32 res1; 47 __be32 tcrc; 48 __be32 res2; 49 __be32 res3; 50 __be32 c_mask; 51 __be32 c_pres; 52 __be16 disfc; 53 __be16 crcec; 54 __be16 abtsc; 55 __be16 nmarc; 56 __be32 max_cnt; 57 __be16 mflr; 58 __be16 rfthr; 59 __be16 rfcnt; 60 __be16 hmask; 61 __be16 haddr1; 62 __be16 haddr2; 63 __be16 haddr3; 64 __be16 haddr4; 65 __be16 ts_tmp; 66 __be16 tmp_mb; 67}; 68 69struct ucc_hdlc_private { 70 struct ucc_tdm *utdm; 71 struct ucc_tdm_info *ut_info; 72 struct ucc_fast_private *uccf; 73 struct device *dev; 74 struct net_device *ndev; 75 struct napi_struct napi; 76 struct ucc_fast __iomem *uf_regs; /* UCC Fast registers */ 77 struct ucc_hdlc_param __iomem *ucc_pram; 78 u16 tsa; 79 bool hdlc_busy; 80 bool loopback; 81 bool hdlc_bus; 82 83 u8 *tx_buffer; 84 u8 *rx_buffer; 85 dma_addr_t dma_tx_addr; 86 dma_addr_t dma_rx_addr; 87 88 struct qe_bd *tx_bd_base; 89 struct qe_bd *rx_bd_base; 90 dma_addr_t dma_tx_bd; 91 dma_addr_t dma_rx_bd; 92 struct qe_bd *curtx_bd; 93 struct qe_bd *currx_bd; 94 struct qe_bd *dirty_tx; 95 u16 currx_bdnum; 96 97 struct sk_buff **tx_skbuff; 98 struct sk_buff **rx_skbuff; 99 u16 skb_curtx; 100 u16 skb_currx; 101 unsigned short skb_dirtytx; 102 103 unsigned short tx_ring_size; 104 unsigned short rx_ring_size; 105 u32 ucc_pram_offset; 106 107 unsigned short encoding; 108 unsigned short parity; 109 u32 clocking; 110 spinlock_t lock; /* lock for Tx BD and Tx buffer */ 111#ifdef CONFIG_PM 112 struct ucc_hdlc_param *ucc_pram_bak; 113 u32 gumr; 114 u8 guemr; 115 u32 cmxsi1cr_l, cmxsi1cr_h; 116 u32 cmxsi1syr; 117 u32 cmxucr[4]; 118#endif 119}; 120 121#define TX_BD_RING_LEN 0x10 122#define RX_BD_RING_LEN 0x20 123#define RX_CLEAN_MAX 0x10 124#define NUM_OF_BUF 4 125#define MAX_RX_BUF_LENGTH (48 * 0x20) 126#define MAX_FRAME_LENGTH (MAX_RX_BUF_LENGTH + 8) 127#define ALIGNMENT_OF_UCC_HDLC_PRAM 64 128#define SI_BANK_SIZE 128 129#define MAX_HDLC_NUM 4 130#define HDLC_HEAD_LEN 2 131#define HDLC_CRC_SIZE 2 132#define TX_RING_MOD_MASK(size) (size - 1) 133#define RX_RING_MOD_MASK(size) (size - 1) 134 135#define HDLC_HEAD_MASK 0x0000 136#define DEFAULT_HDLC_HEAD 0xff44 137#define DEFAULT_ADDR_MASK 0x00ff 138#define DEFAULT_HDLC_ADDR 0x00ff 139 140#define BMR_GBL 0x20000000 141#define BMR_BIG_ENDIAN 0x10000000 142#define CRC_16BIT_MASK 0x0000F0B8 143#define CRC_16BIT_PRES 0x0000FFFF 144#define DEFAULT_RFTHR 1 145 146#define DEFAULT_PPP_HEAD 0xff03 147 148#endif 149