Author: manu
Date: Wed Jul 22 18:30:17 2020
New Revision: 363425
URL: https://svnweb.freebsd.org/changeset/base/363425

Log:
  mmccam: Add a generic mmccam_start_discovery function
  
  This is a generic function start a scan request for the given
  cam_sim.
  Other driver can now just use this function to request a new rescan.
  
  Submitted by: kibab

Modified:
  head/sys/cam/mmc/mmc_all.h
  head/sys/cam/mmc/mmc_xpt.c
  head/sys/dev/sdhci/sdhci.c

Modified: head/sys/cam/mmc/mmc_all.h
==============================================================================
--- head/sys/cam/mmc/mmc_all.h  Wed Jul 22 18:21:37 2020        (r363424)
+++ head/sys/cam/mmc/mmc_all.h  Wed Jul 22 18:30:17 2020        (r363425)
@@ -64,6 +64,7 @@
 #ifndef CAM_MMC_ALL_H
 #define CAM_MMC_ALL_H
 
+#include <cam/cam_sim.h>
 #include <cam/mmc/mmc.h>
 #include <dev/mmc/mmcreg.h>
 
@@ -72,5 +73,6 @@ struct ccb_pathinq;
 struct cam_sim;
 void   mmc_path_inq(struct ccb_pathinq *cpi, const char *hba,
     const struct cam_sim *sim, size_t maxio);
+void    mmccam_start_discovery(struct cam_sim *sim);
 
 #endif

Modified: head/sys/cam/mmc/mmc_xpt.c
==============================================================================
--- head/sys/cam/mmc/mmc_xpt.c  Wed Jul 22 18:21:37 2020        (r363424)
+++ head/sys/cam/mmc/mmc_xpt.c  Wed Jul 22 18:30:17 2020        (r363425)
@@ -404,6 +404,29 @@ mmc_announce_periph(struct cam_periph *periph)
        printf("XPT info: CLK %04X, ...\n", cts.proto_specific.mmc.ios.clock);
 }
 
+void
+mmccam_start_discovery(struct cam_sim *sim) {
+       union ccb *ccb;
+       uint32_t pathid;
+
+       pathid = cam_sim_path(sim);
+       ccb = xpt_alloc_ccb_nowait();
+       if (ccb == NULL) {
+               return;
+       }
+
+       /*
+        * We create a rescan request for BUS:0:0, since the card
+        * will be at lun 0.
+        */
+       if (xpt_create_path(&ccb->ccb_h.path, NULL, pathid,
+               /* target */ 0, /* lun */ 0) != CAM_REQ_CMP) {
+               xpt_free_ccb(ccb);
+               return;
+       }
+       xpt_rescan(ccb);
+}
+
 /* This func is called per attached device :-( */
 void
 mmc_print_ident(struct mmc_params *ident_data)

Modified: head/sys/dev/sdhci/sdhci.c
==============================================================================
--- head/sys/dev/sdhci/sdhci.c  Wed Jul 22 18:21:37 2020        (r363424)
+++ head/sys/dev/sdhci/sdhci.c  Wed Jul 22 18:30:17 2020        (r363425)
@@ -626,29 +626,8 @@ sdhci_card_task(void *arg, int pending __unused)
                                slot_printf(slot, "Card inserted\n");
 #ifdef MMCCAM
                        slot->card_present = 1;
-                       union ccb *ccb;
-                       uint32_t pathid;
-                       pathid = cam_sim_path(slot->sim);
-                       ccb = xpt_alloc_ccb_nowait();
-                       if (ccb == NULL) {
-                               slot_printf(slot, "Unable to alloc CCB for 
rescan\n");
-                               SDHCI_UNLOCK(slot);
-                               return;
-                       }
-
-                       /*
-                        * We create a rescan request for BUS:0:0, since the 
card
-                        * will be at lun 0.
-                        */
-                       if (xpt_create_path(&ccb->ccb_h.path, NULL, pathid,
-                                           /* target */ 0, /* lun */ 0) != 
CAM_REQ_CMP) {
-                               slot_printf(slot, "Unable to create path for 
rescan\n");
-                               SDHCI_UNLOCK(slot);
-                               xpt_free_ccb(ccb);
-                               return;
-                       }
+                       mmccam_start_discovery(slot->sim);
                        SDHCI_UNLOCK(slot);
-                       xpt_rescan(ccb);
 #else
                        d = slot->dev = device_add_child(slot->bus, "mmc", -1);
                        SDHCI_UNLOCK(slot);
@@ -672,29 +651,8 @@ sdhci_card_task(void *arg, int pending __unused)
                        slot->dev = NULL;
 #ifdef MMCCAM
                        slot->card_present = 0;
-                       union ccb *ccb;
-                       uint32_t pathid;
-                       pathid = cam_sim_path(slot->sim);
-                       ccb = xpt_alloc_ccb_nowait();
-                       if (ccb == NULL) {
-                               slot_printf(slot, "Unable to alloc CCB for 
rescan\n");
-                               SDHCI_UNLOCK(slot);
-                               return;
-                       }
-
-                       /*
-                        * We create a rescan request for BUS:0:0, since the 
card
-                        * will be at lun 0.
-                        */
-                       if (xpt_create_path(&ccb->ccb_h.path, NULL, pathid,
-                                           /* target */ 0, /* lun */ 0) != 
CAM_REQ_CMP) {
-                               slot_printf(slot, "Unable to create path for 
rescan\n");
-                               SDHCI_UNLOCK(slot);
-                               xpt_free_ccb(ccb);
-                               return;
-                       }
+                       mmccam_start_discovery(slot->sim);
                        SDHCI_UNLOCK(slot);
-                       xpt_rescan(ccb);
 #else
                        slot->intmask &= ~sdhci_tuning_intmask(slot);
                        WR4(slot, SDHCI_INT_ENABLE, slot->intmask);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to