[haiku-commits] Change in haiku[master]: mmc_bus: add execute_command function

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 26 Jul 2020 18:23:20 +0000

From Adrien Destugues <pulkomandy@xxxxxxxxx>:

Adrien Destugues has uploaded this change for review. ( 
https://review.haiku-os.org/c/haiku/+/3094 ;)


Change subject: mmc_bus: add execute_command function
......................................................................

mmc_bus: add execute_command function

For now it just forwards the command to the SDHCI controller.
The bus will gain more features and functions as work advances (tracking
which card is active, arbitration of DMA transfers, etc).
---
M headers/private/drivers/mmc.h
M src/add-ons/kernel/bus_managers/mmc/mmc_bus.cpp
M src/add-ons/kernel/bus_managers/mmc/mmc_module.cpp
3 files changed, 44 insertions(+), 10 deletions(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/94/3094/1

diff --git a/headers/private/drivers/mmc.h b/headers/private/drivers/mmc.h
index 8638e5f..2723962 100644
--- a/headers/private/drivers/mmc.h
+++ b/headers/private/drivers/mmc.h
@@ -35,4 +35,13 @@
 } mmc_bus_interface;


+// Interface between mmc device driver (mmc_disk, sdio drivers, ...) and 
mmc_bus
+typedef struct mmc_device_interface {
+       driver_module_info info;
+
+       status_t (*execute_command)(device_node* node, uint8_t command,
+               uint32_t argument, uint32_t* result);
+} mmc_device_interface;
+
+
 #endif /* _MMC_H */
diff --git a/src/add-ons/kernel/bus_managers/mmc/mmc_bus.cpp 
b/src/add-ons/kernel/bus_managers/mmc/mmc_bus.cpp
index cf289fd..b756861 100644
--- a/src/add-ons/kernel/bus_managers/mmc/mmc_bus.cpp
+++ b/src/add-ons/kernel/bus_managers/mmc/mmc_bus.cpp
@@ -178,6 +178,7 @@

                        device_attr attrs[] = {
                                { B_DEVICE_BUS, B_STRING_TYPE, {string: "mmc" 
}},
+                               { B_DEVICE_PRETTY_NAME, B_STRING_TYPE, {string: 
"mmc device" }},
                                { B_DEVICE_VENDOR_ID, B_UINT32_TYPE, {ui32: 
vendor}},
                                { B_DEVICE_ID, B_STRING_TYPE, {string: name}},
                                { B_DEVICE_UNIQUE_ID, B_UINT32_TYPE, {ui32: 
serial}},
diff --git a/src/add-ons/kernel/bus_managers/mmc/mmc_module.cpp 
b/src/add-ons/kernel/bus_managers/mmc/mmc_module.cpp
index cb917f8..5104f87 100644
--- a/src/add-ons/kernel/bus_managers/mmc/mmc_module.cpp
+++ b/src/add-ons/kernel/bus_managers/mmc/mmc_module.cpp
@@ -79,6 +79,27 @@


 static status_t
+mmc_bus_execute_command(device_node* node, uint8_t command, uint32_t argument,
+       uint32_t* result)
+{
+       // FIXME store these in the bus cookie or something instead of
+       // getting/putting the parents each time.
+       mmc_bus_interface* sdhci;
+       void* cookie;
+
+       TRACE("In mmc_bus_execute_command\n");
+       device_node* parent = gDeviceManager->get_parent_node(node);
+       device_node* grandparent = gDeviceManager->get_parent_node(parent);
+       gDeviceManager->get_driver(grandparent, (driver_module_info**)&sdhci,
+               &cookie);
+       gDeviceManager->put_node(grandparent);
+       gDeviceManager->put_node(parent);
+
+       return sdhci->execute_command(cookie, command, argument, result);
+}
+
+
+static status_t
 std_ops(int32 op, ...)
 {
        switch (op) {
@@ -113,18 +134,21 @@
 };


-driver_module_info mmc_bus_controller_module = {
+mmc_device_interface mmc_bus_controller_module = {
        {
-               MMC_BUS_MODULE_NAME,
-               0,
-               &std_ops
-       },
+               {
+                       MMC_BUS_MODULE_NAME,
+                       0,
+                       &std_ops
+               },

-       NULL, // supported devices
-       mmc_bus_added_device,
-       NULL,
-       NULL,
-       NULL
+               NULL, // supported devices
+               mmc_bus_added_device,
+               NULL,
+               NULL,
+               NULL
+       },
+       mmc_bus_execute_command
 };



--
To view, visit https://review.haiku-os.org/c/haiku/+/3094
To unsubscribe, or for help writing mail filters, visit 
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I094eb84f27e7789387a3f8fb65fba1e5fcfa3e8a
Gerrit-Change-Number: 3094
Gerrit-PatchSet: 1
Gerrit-Owner: Adrien Destugues <pulkomandy@xxxxxxxxx>
Gerrit-MessageType: newchange

Other related posts:

  • » [haiku-commits] Change in haiku[master]: mmc_bus: add execute_command function - Gerrit