@@ -75,38 +75,45 @@ static const struct file_operations fops_debug = {
7575
7676#endif
7777
78+ #define DMA_BUF_LEN 1024
79+
7880static ssize_t read_file_dma (struct file * file , char __user * user_buf ,
7981 size_t count , loff_t * ppos )
8082{
8183 struct ath_softc * sc = file -> private_data ;
8284 struct ath_hw * ah = sc -> sc_ah ;
83- char buf [1024 ];
85+ char * buf ;
86+ int retval ;
8487 unsigned int len = 0 ;
8588 u32 val [ATH9K_NUM_DMA_DEBUG_REGS ];
8689 int i , qcuOffset = 0 , dcuOffset = 0 ;
8790 u32 * qcuBase = & val [0 ], * dcuBase = & val [4 ];
8891
92+ buf = kmalloc (DMA_BUF_LEN , GFP_KERNEL );
93+ if (!buf )
94+ return 0 ;
95+
8996 ath9k_ps_wakeup (sc );
9097
9198 REG_WRITE_D (ah , AR_MACMISC ,
9299 ((AR_MACMISC_DMA_OBS_LINE_8 << AR_MACMISC_DMA_OBS_S ) |
93100 (AR_MACMISC_MISC_OBS_BUS_1 <<
94101 AR_MACMISC_MISC_OBS_BUS_MSB_S )));
95102
96- len += snprintf (buf + len , sizeof ( buf ) - len ,
103+ len += snprintf (buf + len , DMA_BUF_LEN - len ,
97104 "Raw DMA Debug values:\n" );
98105
99106 for (i = 0 ; i < ATH9K_NUM_DMA_DEBUG_REGS ; i ++ ) {
100107 if (i % 4 == 0 )
101- len += snprintf (buf + len , sizeof ( buf ) - len , "\n" );
108+ len += snprintf (buf + len , DMA_BUF_LEN - len , "\n" );
102109
103110 val [i ] = REG_READ_D (ah , AR_DMADBG_0 + (i * sizeof (u32 )));
104- len += snprintf (buf + len , sizeof ( buf ) - len , "%d: %08x " ,
111+ len += snprintf (buf + len , DMA_BUF_LEN - len , "%d: %08x " ,
105112 i , val [i ]);
106113 }
107114
108- len += snprintf (buf + len , sizeof ( buf ) - len , "\n\n" );
109- len += snprintf (buf + len , sizeof ( buf ) - len ,
115+ len += snprintf (buf + len , DMA_BUF_LEN - len , "\n\n" );
116+ len += snprintf (buf + len , DMA_BUF_LEN - len ,
110117 "Num QCU: chain_st fsp_ok fsp_st DCU: chain_st\n" );
111118
112119 for (i = 0 ; i < ATH9K_NUM_QUEUES ; i ++ , qcuOffset += 4 , dcuOffset += 5 ) {
@@ -120,43 +127,45 @@ static ssize_t read_file_dma(struct file *file, char __user *user_buf,
120127 dcuBase ++ ;
121128 }
122129
123- len += snprintf (buf + len , sizeof ( buf ) - len ,
130+ len += snprintf (buf + len , DMA_BUF_LEN - len ,
124131 "%2d %2x %1x %2x %2x\n" ,
125132 i , (* qcuBase & (0x7 << qcuOffset )) >> qcuOffset ,
126133 (* qcuBase & (0x8 << qcuOffset )) >> (qcuOffset + 3 ),
127134 val [2 ] & (0x7 << (i * 3 )) >> (i * 3 ),
128135 (* dcuBase & (0x1f << dcuOffset )) >> dcuOffset );
129136 }
130137
131- len += snprintf (buf + len , sizeof ( buf ) - len , "\n" );
138+ len += snprintf (buf + len , DMA_BUF_LEN - len , "\n" );
132139
133- len += snprintf (buf + len , sizeof ( buf ) - len ,
140+ len += snprintf (buf + len , DMA_BUF_LEN - len ,
134141 "qcu_stitch state: %2x qcu_fetch state: %2x\n" ,
135142 (val [3 ] & 0x003c0000 ) >> 18 , (val [3 ] & 0x03c00000 ) >> 22 );
136- len += snprintf (buf + len , sizeof ( buf ) - len ,
143+ len += snprintf (buf + len , DMA_BUF_LEN - len ,
137144 "qcu_complete state: %2x dcu_complete state: %2x\n" ,
138145 (val [3 ] & 0x1c000000 ) >> 26 , (val [6 ] & 0x3 ));
139- len += snprintf (buf + len , sizeof ( buf ) - len ,
146+ len += snprintf (buf + len , DMA_BUF_LEN - len ,
140147 "dcu_arb state: %2x dcu_fp state: %2x\n" ,
141148 (val [5 ] & 0x06000000 ) >> 25 , (val [5 ] & 0x38000000 ) >> 27 );
142- len += snprintf (buf + len , sizeof ( buf ) - len ,
149+ len += snprintf (buf + len , DMA_BUF_LEN - len ,
143150 "chan_idle_dur: %3d chan_idle_dur_valid: %1d\n" ,
144151 (val [6 ] & 0x000003fc ) >> 2 , (val [6 ] & 0x00000400 ) >> 10 );
145- len += snprintf (buf + len , sizeof ( buf ) - len ,
152+ len += snprintf (buf + len , DMA_BUF_LEN - len ,
146153 "txfifo_valid_0: %1d txfifo_valid_1: %1d\n" ,
147154 (val [6 ] & 0x00000800 ) >> 11 , (val [6 ] & 0x00001000 ) >> 12 );
148- len += snprintf (buf + len , sizeof ( buf ) - len ,
155+ len += snprintf (buf + len , DMA_BUF_LEN - len ,
149156 "txfifo_dcu_num_0: %2d txfifo_dcu_num_1: %2d\n" ,
150157 (val [6 ] & 0x0001e000 ) >> 13 , (val [6 ] & 0x001e0000 ) >> 17 );
151158
152- len += snprintf (buf + len , sizeof ( buf ) - len , "pcu observe: 0x%x \n" ,
159+ len += snprintf (buf + len , DMA_BUF_LEN - len , "pcu observe: 0x%x \n" ,
153160 REG_READ_D (ah , AR_OBS_BUS_1 ));
154- len += snprintf (buf + len , sizeof ( buf ) - len ,
161+ len += snprintf (buf + len , DMA_BUF_LEN - len ,
155162 "AR_CR: 0x%x \n" , REG_READ_D (ah , AR_CR ));
156163
157164 ath9k_ps_restore (sc );
158165
159- return simple_read_from_buffer (user_buf , count , ppos , buf , len );
166+ retval = simple_read_from_buffer (user_buf , count , ppos , buf , len );
167+ kfree (buf );
168+ return retval ;
160169}
161170
162171static const struct file_operations fops_dma = {
0 commit comments