Lines Matching refs:fru
6188 struct bfa_fru_s *fru = cbarg;
6190 bfa_trc(fru, event);
6195 if (fru->op_busy) {
6196 fru->status = BFA_STATUS_IOC_FAILURE;
6197 fru->cbfn(fru->cbarg, fru->status);
6198 fru->op_busy = 0;
6208 * Send fru write request.
6215 struct bfa_fru_s *fru = cbarg;
6217 (struct bfi_fru_write_req_s *) fru->mb.msg;
6220 msg->offset = cpu_to_be32(fru->addr_off + fru->offset);
6221 len = (fru->residue < BFA_FRU_DMA_BUF_SZ) ?
6222 fru->residue : BFA_FRU_DMA_BUF_SZ;
6228 msg->last = (len == fru->residue) ? 1 : 0;
6230 msg->trfr_cmpl = (len == fru->residue) ? fru->trfr_cmpl : 0;
6231 bfi_h2i_set(msg->mh, BFI_MC_FRU, msg_type, bfa_ioc_portid(fru->ioc));
6232 bfa_alen_set(&msg->alen, len, fru->dbuf_pa);
6234 memcpy(fru->dbuf_kva, fru->ubuf + fru->offset, len);
6235 bfa_ioc_mbox_queue(fru->ioc, &fru->mb);
6237 fru->residue -= len;
6238 fru->offset += len;
6242 * Send fru read request.
6249 struct bfa_fru_s *fru = cbarg;
6251 (struct bfi_fru_read_req_s *) fru->mb.msg;
6254 msg->offset = cpu_to_be32(fru->addr_off + fru->offset);
6255 len = (fru->residue < BFA_FRU_DMA_BUF_SZ) ?
6256 fru->residue : BFA_FRU_DMA_BUF_SZ;
6258 bfi_h2i_set(msg->mh, BFI_MC_FRU, msg_type, bfa_ioc_portid(fru->ioc));
6259 bfa_alen_set(&msg->alen, len, fru->dbuf_pa);
6260 bfa_ioc_mbox_queue(fru->ioc, &fru->mb);
6271 /* min driver doesn't need fru */
6281 * @param[in] fru - fru structure
6288 bfa_fru_attach(struct bfa_fru_s *fru, struct bfa_ioc_s *ioc, void *dev,
6291 fru->ioc = ioc;
6292 fru->trcmod = trcmod;
6293 fru->cbfn = NULL;
6294 fru->cbarg = NULL;
6295 fru->op_busy = 0;
6297 bfa_ioc_mbox_regisr(fru->ioc, BFI_MC_FRU, bfa_fru_intr, fru);
6298 bfa_q_qe_init(&fru->ioc_notify);
6299 bfa_ioc_notify_init(&fru->ioc_notify, bfa_fru_notify, fru);
6300 list_add_tail(&fru->ioc_notify.qe, &fru->ioc->notify_q);
6302 /* min driver doesn't need fru */
6304 fru->dbuf_kva = NULL;
6305 fru->dbuf_pa = 0;
6310 * Claim memory for fru
6312 * @param[in] fru - fru structure
6318 bfa_fru_memclaim(struct bfa_fru_s *fru, u8 *dm_kva, u64 dm_pa,
6324 fru->dbuf_kva = dm_kva;
6325 fru->dbuf_pa = dm_pa;
6326 memset(fru->dbuf_kva, 0, BFA_FRU_DMA_BUF_SZ);
6332 * Update fru vpd image.
6334 * @param[in] fru - fru structure
6344 bfa_fruvpd_update(struct bfa_fru_s *fru, void *buf, u32 len, u32 offset,
6347 bfa_trc(fru, BFI_FRUVPD_H2I_WRITE_REQ);
6348 bfa_trc(fru, len);
6349 bfa_trc(fru, offset);
6351 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2 &&
6352 fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK2)
6355 if (fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK)
6358 if (!bfa_ioc_is_operational(fru->ioc))
6361 if (fru->op_busy) {
6362 bfa_trc(fru, fru->op_busy);
6366 fru->op_busy = 1;
6368 fru->cbfn = cbfn;
6369 fru->cbarg = cbarg;
6370 fru->residue = len;
6371 fru->offset = 0;
6372 fru->addr_off = offset;
6373 fru->ubuf = buf;
6374 fru->trfr_cmpl = trfr_cmpl;
6376 bfa_fru_write_send(fru, BFI_FRUVPD_H2I_WRITE_REQ);
6382 * Read fru vpd image.
6384 * @param[in] fru - fru structure
6394 bfa_fruvpd_read(struct bfa_fru_s *fru, void *buf, u32 len, u32 offset,
6397 bfa_trc(fru, BFI_FRUVPD_H2I_READ_REQ);
6398 bfa_trc(fru, len);
6399 bfa_trc(fru, offset);
6401 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2)
6404 if (fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK &&
6405 fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK2)
6408 if (!bfa_ioc_is_operational(fru->ioc))
6411 if (fru->op_busy) {
6412 bfa_trc(fru, fru->op_busy);
6416 fru->op_busy = 1;
6418 fru->cbfn = cbfn;
6419 fru->cbarg = cbarg;
6420 fru->residue = len;
6421 fru->offset = 0;
6422 fru->addr_off = offset;
6423 fru->ubuf = buf;
6424 bfa_fru_read_send(fru, BFI_FRUVPD_H2I_READ_REQ);
6430 * Get maximum size fru vpd image.
6432 * @param[in] fru - fru structure
6433 * @param[out] size - maximum size of fru vpd data
6438 bfa_fruvpd_get_max_size(struct bfa_fru_s *fru, u32 *max_size)
6440 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2)
6443 if (!bfa_ioc_is_operational(fru->ioc))
6446 if (fru->ioc->attr->card_type == BFA_MFG_TYPE_CHINOOK ||
6447 fru->ioc->attr->card_type == BFA_MFG_TYPE_CHINOOK2)
6456 * @param[in] fru - fru structure
6466 bfa_tfru_write(struct bfa_fru_s *fru, void *buf, u32 len, u32 offset,
6469 bfa_trc(fru, BFI_TFRU_H2I_WRITE_REQ);
6470 bfa_trc(fru, len);
6471 bfa_trc(fru, offset);
6472 bfa_trc(fru, *((u8 *) buf));
6474 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2)
6477 if (!bfa_ioc_is_operational(fru->ioc))
6480 if (fru->op_busy) {
6481 bfa_trc(fru, fru->op_busy);
6485 fru->op_busy = 1;
6487 fru->cbfn = cbfn;
6488 fru->cbarg = cbarg;
6489 fru->residue = len;
6490 fru->offset = 0;
6491 fru->addr_off = offset;
6492 fru->ubuf = buf;
6494 bfa_fru_write_send(fru, BFI_TFRU_H2I_WRITE_REQ);
6502 * @param[in] fru - fru structure
6512 bfa_tfru_read(struct bfa_fru_s *fru, void *buf, u32 len, u32 offset,
6515 bfa_trc(fru, BFI_TFRU_H2I_READ_REQ);
6516 bfa_trc(fru, len);
6517 bfa_trc(fru, offset);
6519 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2)
6522 if (!bfa_ioc_is_operational(fru->ioc))
6525 if (fru->op_busy) {
6526 bfa_trc(fru, fru->op_busy);
6530 fru->op_busy = 1;
6532 fru->cbfn = cbfn;
6533 fru->cbarg = cbarg;
6534 fru->residue = len;
6535 fru->offset = 0;
6536 fru->addr_off = offset;
6537 fru->ubuf = buf;
6538 bfa_fru_read_send(fru, BFI_TFRU_H2I_READ_REQ);
6544 * Process fru response messages upon receiving interrupts.
6546 * @param[in] fruarg - fru structure
6552 struct bfa_fru_s *fru = fruarg;
6556 bfa_trc(fru, msg->mh.msg_id);
6558 if (!fru->op_busy) {
6562 bfa_trc(fru, 0x9999);
6570 bfa_trc(fru, status);
6572 if (status != BFA_STATUS_OK || fru->residue == 0) {
6573 fru->status = status;
6574 fru->op_busy = 0;
6575 if (fru->cbfn)
6576 fru->cbfn(fru->cbarg, fru->status);
6578 bfa_trc(fru, fru->offset);
6580 bfa_fru_write_send(fru,
6583 bfa_fru_write_send(fru,
6590 bfa_trc(fru, status);
6593 fru->status = status;
6594 fru->op_busy = 0;
6595 if (fru->cbfn)
6596 fru->cbfn(fru->cbarg, fru->status);
6600 bfa_trc(fru, fru->offset);
6601 bfa_trc(fru, len);
6603 memcpy(fru->ubuf + fru->offset, fru->dbuf_kva, len);
6604 fru->residue -= len;
6605 fru->offset += len;
6607 if (fru->residue == 0) {
6608 fru->status = status;
6609 fru->op_busy = 0;
6610 if (fru->cbfn)
6611 fru->cbfn(fru->cbarg, fru->status);
6614 bfa_fru_read_send(fru,
6617 bfa_fru_read_send(fru,