fsl_ucc_hdlc.h 3.0 KB

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