Lines Matching refs:mdev
43 struct mic_device *mdev = dev_get_drvdata(dev->parent); in mic_dma_map_page() local
45 return mic_map_single(mdev, va, size); in mic_dma_map_page()
53 struct mic_device *mdev = dev_get_drvdata(dev->parent); in mic_dma_unmap_page() local
54 mic_unmap_single(mdev, dma_addr, size); in mic_dma_unmap_page()
80 struct mic_device *mdev = mbdev_to_mdev(mbdev); in _mic_ack_interrupt() local
81 mdev->ops->intr_workarounds(mdev); in _mic_ack_interrupt()
94 static void mic_reset(struct mic_device *mdev) in mic_reset() argument
100 reinit_completion(&mdev->reset_wait); in mic_reset()
101 mdev->ops->reset_fw_ready(mdev); in mic_reset()
102 mdev->ops->reset(mdev); in mic_reset()
105 if (mdev->ops->is_fw_ready(mdev)) in mic_reset()
114 mic_set_state(mdev, MIC_RESET_FAILED); in mic_reset()
116 complete_all(&mdev->reset_wait); in mic_reset()
120 void mic_bootparam_init(struct mic_device *mdev) in mic_bootparam_init() argument
122 struct mic_bootparam *bootparam = mdev->dp; in mic_bootparam_init()
125 bootparam->c2h_shutdown_db = mdev->shutdown_db; in mic_bootparam_init()
140 int mic_start(struct mic_device *mdev, const char *buf) in mic_start() argument
143 mutex_lock(&mdev->mic_mutex); in mic_start()
145 if (MIC_OFFLINE != mdev->state) { in mic_start()
149 if (!mdev->ops->is_fw_ready(mdev)) { in mic_start()
150 mic_reset(mdev); in mic_start()
157 mdev->dma_mbdev = mbus_register_device(mdev->sdev->parent, in mic_start()
159 &mbus_hw_ops, mdev->mmio.va); in mic_start()
160 if (IS_ERR(mdev->dma_mbdev)) { in mic_start()
161 rc = PTR_ERR(mdev->dma_mbdev); in mic_start()
164 mdev->dma_ch = mic_request_dma_chan(mdev); in mic_start()
165 if (!mdev->dma_ch) { in mic_start()
169 rc = mdev->ops->load_mic_fw(mdev, buf); in mic_start()
172 mic_smpt_restore(mdev); in mic_start()
173 mic_intr_restore(mdev); in mic_start()
174 mdev->intr_ops->enable_interrupts(mdev); in mic_start()
175 mdev->ops->write_spad(mdev, MIC_DPLO_SPAD, mdev->dp_dma_addr); in mic_start()
176 mdev->ops->write_spad(mdev, MIC_DPHI_SPAD, mdev->dp_dma_addr >> 32); in mic_start()
177 mdev->ops->send_firmware_intr(mdev); in mic_start()
178 mic_set_state(mdev, MIC_ONLINE); in mic_start()
181 dma_release_channel(mdev->dma_ch); in mic_start()
183 mbus_unregister_device(mdev->dma_mbdev); in mic_start()
185 mutex_unlock(&mdev->mic_mutex); in mic_start()
196 void mic_stop(struct mic_device *mdev, bool force) in mic_stop() argument
198 mutex_lock(&mdev->mic_mutex); in mic_stop()
199 if (MIC_OFFLINE != mdev->state || force) { in mic_stop()
200 mic_virtio_reset_devices(mdev); in mic_stop()
201 if (mdev->dma_ch) { in mic_stop()
202 dma_release_channel(mdev->dma_ch); in mic_stop()
203 mdev->dma_ch = NULL; in mic_stop()
205 mbus_unregister_device(mdev->dma_mbdev); in mic_stop()
206 mic_bootparam_init(mdev); in mic_stop()
207 mic_reset(mdev); in mic_stop()
208 if (MIC_RESET_FAILED == mdev->state) in mic_stop()
210 mic_set_shutdown_status(mdev, MIC_NOP); in mic_stop()
211 if (MIC_SUSPENDED != mdev->state) in mic_stop()
212 mic_set_state(mdev, MIC_OFFLINE); in mic_stop()
215 mutex_unlock(&mdev->mic_mutex); in mic_stop()
224 void mic_shutdown(struct mic_device *mdev) in mic_shutdown() argument
226 struct mic_bootparam *bootparam = mdev->dp; in mic_shutdown()
229 mutex_lock(&mdev->mic_mutex); in mic_shutdown()
230 if (MIC_ONLINE == mdev->state && db != -1) { in mic_shutdown()
232 mdev->ops->send_intr(mdev, db); in mic_shutdown()
233 mic_set_state(mdev, MIC_SHUTTING_DOWN); in mic_shutdown()
235 mutex_unlock(&mdev->mic_mutex); in mic_shutdown()
247 struct mic_device *mdev = container_of(work, struct mic_device, in mic_shutdown_work() local
249 struct mic_bootparam *bootparam = mdev->dp; in mic_shutdown_work()
251 mutex_lock(&mdev->mic_mutex); in mic_shutdown_work()
252 mic_set_shutdown_status(mdev, bootparam->shutdown_status); in mic_shutdown_work()
260 if (MIC_SHUTTING_DOWN != mdev->state && in mic_shutdown_work()
261 MIC_SUSPENDED != mdev->state) in mic_shutdown_work()
262 mic_set_state(mdev, MIC_SHUTTING_DOWN); in mic_shutdown_work()
263 mutex_unlock(&mdev->mic_mutex); in mic_shutdown_work()
274 struct mic_device *mdev = container_of(work, struct mic_device, in mic_reset_trigger_work() local
277 mic_stop(mdev, false); in mic_reset_trigger_work()
287 void mic_complete_resume(struct mic_device *mdev) in mic_complete_resume() argument
289 if (mdev->state != MIC_SUSPENDED) { in mic_complete_resume()
290 dev_warn(mdev->sdev->parent, "state %d should be %d\n", in mic_complete_resume()
291 mdev->state, MIC_SUSPENDED); in mic_complete_resume()
296 if (!mdev->ops->is_fw_ready(mdev)) in mic_complete_resume()
297 mic_stop(mdev, true); in mic_complete_resume()
299 mutex_lock(&mdev->mic_mutex); in mic_complete_resume()
300 mic_set_state(mdev, MIC_OFFLINE); in mic_complete_resume()
301 mutex_unlock(&mdev->mic_mutex); in mic_complete_resume()
310 void mic_prepare_suspend(struct mic_device *mdev) in mic_prepare_suspend() argument
316 mutex_lock(&mdev->mic_mutex); in mic_prepare_suspend()
317 switch (mdev->state) { in mic_prepare_suspend()
323 mic_set_state(mdev, MIC_SUSPENDED); in mic_prepare_suspend()
324 mutex_unlock(&mdev->mic_mutex); in mic_prepare_suspend()
332 mic_set_state(mdev, MIC_SUSPENDING); in mic_prepare_suspend()
333 mutex_unlock(&mdev->mic_mutex); in mic_prepare_suspend()
334 timeout = wait_for_completion_timeout(&mdev->reset_wait, in mic_prepare_suspend()
338 mutex_lock(&mdev->mic_mutex); in mic_prepare_suspend()
339 mic_set_state(mdev, MIC_SUSPENDED); in mic_prepare_suspend()
340 mutex_unlock(&mdev->mic_mutex); in mic_prepare_suspend()
341 mic_stop(mdev, true); in mic_prepare_suspend()
349 mic_set_state(mdev, MIC_SUSPENDED); in mic_prepare_suspend()
350 mutex_unlock(&mdev->mic_mutex); in mic_prepare_suspend()
351 timeout = wait_for_completion_timeout(&mdev->reset_wait, in mic_prepare_suspend()
355 mic_stop(mdev, true); in mic_prepare_suspend()
358 mutex_unlock(&mdev->mic_mutex); in mic_prepare_suspend()
369 void mic_suspend(struct mic_device *mdev) in mic_suspend() argument
371 struct mic_bootparam *bootparam = mdev->dp; in mic_suspend()
374 mutex_lock(&mdev->mic_mutex); in mic_suspend()
375 if (MIC_SUSPENDING == mdev->state && db != -1) { in mic_suspend()
377 mdev->ops->send_intr(mdev, db); in mic_suspend()
378 mic_set_state(mdev, MIC_SUSPENDED); in mic_suspend()
380 mutex_unlock(&mdev->mic_mutex); in mic_suspend()