Lines Matching refs:ar

23 int ath6kl_bmi_done(struct ath6kl *ar)
28 if (ar->bmi.done_sent) {
33 ar->bmi.done_sent = true;
35 ret = ath6kl_hif_bmi_write(ar, (u8 *)&cid, sizeof(cid));
44 int ath6kl_bmi_get_target_info(struct ath6kl *ar,
50 if (ar->bmi.done_sent) {
55 ret = ath6kl_hif_bmi_write(ar, (u8 *)&cid, sizeof(cid));
61 if (ar->hif_type == ATH6KL_HIF_TYPE_USB) {
62 ret = ath6kl_hif_bmi_read(ar, (u8 *)targ_info,
65 ret = ath6kl_hif_bmi_read(ar, (u8 *)&targ_info->version,
76 ret = ath6kl_hif_bmi_read(ar,
95 ret = ath6kl_hif_bmi_read(ar,
114 int ath6kl_bmi_read(struct ath6kl *ar, u32 addr, u8 *buf, u32 len)
122 if (ar->bmi.done_sent) {
127 size = ar->bmi.max_data_size + sizeof(cid) + sizeof(addr) + sizeof(len);
128 if (size > ar->bmi.max_cmd_size) {
132 memset(ar->bmi.cmd_buf, 0, size);
141 rx_len = (len_remain < ar->bmi.max_data_size) ?
142 len_remain : ar->bmi.max_data_size;
144 memcpy(&(ar->bmi.cmd_buf[offset]), &cid, sizeof(cid));
146 memcpy(&(ar->bmi.cmd_buf[offset]), &addr, sizeof(addr));
148 memcpy(&(ar->bmi.cmd_buf[offset]), &rx_len, sizeof(rx_len));
151 ret = ath6kl_hif_bmi_write(ar, ar->bmi.cmd_buf, offset);
157 ret = ath6kl_hif_bmi_read(ar, ar->bmi.cmd_buf, rx_len);
163 memcpy(&buf[len - len_remain], ar->bmi.cmd_buf, rx_len);
170 int ath6kl_bmi_write(struct ath6kl *ar, u32 addr, u8 *buf, u32 len)
180 if (ar->bmi.done_sent) {
185 if ((ar->bmi.max_data_size + header) > ar->bmi.max_cmd_size) {
190 if (WARN_ON(ar->bmi.max_data_size > sizeof(aligned_buf)))
193 memset(ar->bmi.cmd_buf, 0, ar->bmi.max_data_size + header);
202 if (len_remain < (ar->bmi.max_data_size - header)) {
212 tx_len = (ar->bmi.max_data_size - header);
216 memcpy(&(ar->bmi.cmd_buf[offset]), &cid, sizeof(cid));
218 memcpy(&(ar->bmi.cmd_buf[offset]), &addr, sizeof(addr));
220 memcpy(&(ar->bmi.cmd_buf[offset]), &tx_len, sizeof(tx_len));
222 memcpy(&(ar->bmi.cmd_buf[offset]), src, tx_len);
225 ret = ath6kl_hif_bmi_write(ar, ar->bmi.cmd_buf, offset);
237 int ath6kl_bmi_execute(struct ath6kl *ar, u32 addr, u32 *param)
244 if (ar->bmi.done_sent) {
250 if (size > ar->bmi.max_cmd_size) {
254 memset(ar->bmi.cmd_buf, 0, size);
260 memcpy(&(ar->bmi.cmd_buf[offset]), &cid, sizeof(cid));
262 memcpy(&(ar->bmi.cmd_buf[offset]), &addr, sizeof(addr));
264 memcpy(&(ar->bmi.cmd_buf[offset]), param, sizeof(*param));
267 ret = ath6kl_hif_bmi_write(ar, ar->bmi.cmd_buf, offset);
273 ret = ath6kl_hif_bmi_read(ar, ar->bmi.cmd_buf, sizeof(*param));
279 memcpy(param, ar->bmi.cmd_buf, sizeof(*param));
284 int ath6kl_bmi_set_app_start(struct ath6kl *ar, u32 addr)
291 if (ar->bmi.done_sent) {
297 if (size > ar->bmi.max_cmd_size) {
301 memset(ar->bmi.cmd_buf, 0, size);
306 memcpy(&(ar->bmi.cmd_buf[offset]), &cid, sizeof(cid));
308 memcpy(&(ar->bmi.cmd_buf[offset]), &addr, sizeof(addr));
311 ret = ath6kl_hif_bmi_write(ar, ar->bmi.cmd_buf, offset);
320 int ath6kl_bmi_reg_read(struct ath6kl *ar, u32 addr, u32 *param)
327 if (ar->bmi.done_sent) {
333 if (size > ar->bmi.max_cmd_size) {
337 memset(ar->bmi.cmd_buf, 0, size);
342 memcpy(&(ar->bmi.cmd_buf[offset]), &cid, sizeof(cid));
344 memcpy(&(ar->bmi.cmd_buf[offset]), &addr, sizeof(addr));
347 ret = ath6kl_hif_bmi_write(ar, ar->bmi.cmd_buf, offset);
353 ret = ath6kl_hif_bmi_read(ar, ar->bmi.cmd_buf, sizeof(*param));
358 memcpy(param, ar->bmi.cmd_buf, sizeof(*param));
363 int ath6kl_bmi_reg_write(struct ath6kl *ar, u32 addr, u32 param)
370 if (ar->bmi.done_sent) {
376 if (size > ar->bmi.max_cmd_size) {
380 memset(ar->bmi.cmd_buf, 0, size);
387 memcpy(&(ar->bmi.cmd_buf[offset]), &cid, sizeof(cid));
389 memcpy(&(ar->bmi.cmd_buf[offset]), &addr, sizeof(addr));
391 memcpy(&(ar->bmi.cmd_buf[offset]), &param, sizeof(param));
394 ret = ath6kl_hif_bmi_write(ar, ar->bmi.cmd_buf, offset);
403 int ath6kl_bmi_lz_data(struct ath6kl *ar, u8 *buf, u32 len)
412 if (ar->bmi.done_sent) {
417 size = ar->bmi.max_data_size + header;
418 if (size > ar->bmi.max_cmd_size) {
422 memset(ar->bmi.cmd_buf, 0, size);
429 tx_len = (len_remain < (ar->bmi.max_data_size - header)) ?
430 len_remain : (ar->bmi.max_data_size - header);
433 memcpy(&(ar->bmi.cmd_buf[offset]), &cid, sizeof(cid));
435 memcpy(&(ar->bmi.cmd_buf[offset]), &tx_len, sizeof(tx_len));
437 memcpy(&(ar->bmi.cmd_buf[offset]), &buf[len - len_remain],
441 ret = ath6kl_hif_bmi_write(ar, ar->bmi.cmd_buf, offset);
454 int ath6kl_bmi_lz_stream_start(struct ath6kl *ar, u32 addr)
461 if (ar->bmi.done_sent) {
467 if (size > ar->bmi.max_cmd_size) {
471 memset(ar->bmi.cmd_buf, 0, size);
478 memcpy(&(ar->bmi.cmd_buf[offset]), &cid, sizeof(cid));
480 memcpy(&(ar->bmi.cmd_buf[offset]), &addr, sizeof(addr));
483 ret = ath6kl_hif_bmi_write(ar, ar->bmi.cmd_buf, offset);
493 int ath6kl_bmi_fast_download(struct ath6kl *ar, u32 addr, u8 *buf, u32 len)
500 ret = ath6kl_bmi_lz_stream_start(ar, addr);
509 ret = ath6kl_bmi_lz_data(ar, buf, last_word_offset);
514 ret = ath6kl_bmi_lz_data(ar, (u8 *)&last_word, 4);
519 ret = ath6kl_bmi_lz_stream_start(ar, 0x00);
524 void ath6kl_bmi_reset(struct ath6kl *ar)
526 ar->bmi.done_sent = false;
529 int ath6kl_bmi_init(struct ath6kl *ar)
531 if (WARN_ON(ar->bmi.max_data_size == 0))
535 ar->bmi.max_cmd_size = ar->bmi.max_data_size + (sizeof(u32) * 3);
537 ar->bmi.cmd_buf = kzalloc(ar->bmi.max_cmd_size, GFP_KERNEL);
538 if (!ar->bmi.cmd_buf)
544 void ath6kl_bmi_cleanup(struct ath6kl *ar)
546 kfree(ar->bmi.cmd_buf);
547 ar->bmi.cmd_buf = NULL;